|
Программирование >> Построение запросов sql
То есть домен - это тип данных (как это понимается в современных языках программирования). Например, в языке программирования Pascal допустимы следующие выражения: type TDay = (Sun, Mon, Tue, Wed, Thu, Fri, Sat); var Today: TDay;. Здесь имеется определенный пользователем тип TDay (имеющий в точности семь допустимых значений) и переменная Today, принадлежащая этому типу данных (а значит, и ограниченная этими семью значениями). Эта ситуация аналогична ситуации в реляционной БД, когда имеются домен, названный TDay, и атрибут, названный Today. Основной особенностью доменов является то, что домены ограничивают сравнения. Это значит, что сравнение атрибутов, определенных на основе одного домена, имеет смысл, а сравнение атрибутов, определенных на основе различных доменов, бессмысленно. Домены имеют концептуальную природу. Они должны быть определены в рамках конкретной БД. Тогда каждое определение атрибута (например, столбца определенной таблицы) должно включать ссылку на соответствующий домен. Таким образом, системе будет известно, какие атрибуты можно сравнивать, а какие - нет. Синтаксис запроса определения домена имеет следующий вид: CREATE DOMAIN имя цомена [AS] <тип данных> DEFAULT { литерал NULL USER}] NOT null] [CHECK ( <ограничение домена>)];, имя домена - имя создаваемого домена; <тип данных> - тип данных, представленный в табл. 2.5; DEFAULT- ключевое слово, определяющее значение по умолчанию, применяемое к каждому столбцу как: - литерал - константа строкового, числового типа или типа дата/время (соответствует типу данных домена); - NULL - значение NULL; - USER - контекстная переменная, возвращающая имя пользователя, подключенного к БД. Следующие предложения задают набор ограничений целостности к каждому столбцу, определенному на этом домене: - nOt null - чтобы столбец не имел NULL-значения. Этот атрибут используется при определении домена, если требуется, чтобы все столбцы, создаваемые на основе этого домена, имели непустое значение. Следует помнить, что переопределить атрибут NOT NULL, заданный для домена, нельзя. Часто неизвестно, действительно ли потребуется, чтобы все столбцы, определяемые на домене, имели NOT NULL значения. Также часто требуется определять внешний ключ на домене без условия NOT NULL. Поэтому предпочтительнее добавлять атрибут NOT NULL при определении столбцов (будет рассмотрено далее); - CHECK - определяет список ограничений на значение (VALUE) в соответствующем столбце. Ограничение домена фактически повторяет синтаксис условия поиска в предложении WHERE для однотабличных запросов (используются простое сравнение, проверка на принадлежность диапазону, на членство во множестве и т.д.) с той лишь разницей, что вместо точного указания проверяемого значения используется слово VALUE. Ограничение домена может быть одним из следующих: <ограничение домена>::= [NOT] <ограничение домена1> ;[ANDOR][NOT] <ограничение домена2>], <ограничение домена>::= VALUE <операция сравнения> <значение> VALUE [NOT] BETWEEN <значение1> AND <значение2> VALUE [not] like шаблон [ESCAPE символ пропуска ] VALUE [NOT] CONTAINING <значение> VALUE [NOT] STARTING [WITH] <значение> VALUE [not] in (<значение1> [ , <значение2> ]) VALUE IS [NOT] NULL VALUE IS [NOT] DISTINCT FROM <значение>}; <значение> { столбец константа <выражение> функция}. Ключевое слово VALUE используется как обозначение значения, которое будет помещаться в столбец таблицы, имеющий тип соответствующего домена. Например, для определения домена с именем Telephone, описывающего номер телефона абонента (по умолчанию 999999 и не может быть значение 100000) и имеющего тип VARCHAR(10), следует применить следующий запрос: CREATE DOMAIN Telephone AS VARCHAR(10) DEFAULT 999999 CHECK (VALUE <> 100000);. После определения домена его имя используется для определения типа соответствующих столбцов таблиц. Примечание. Если в таблице присутствует один столбец и он имеет значение по умолчанию, то его не удастся использовать, так как требуется при вставке в таблицу указать явно хотя бы один столбец. В учебной базе данных определены пять доменов, запросы определения которых выглядят следующим образом: CREATE DOMAIN Boolean AS SMALLINT CHECK (VALUE IN (0, 1)); CREATE DOMAIN Money AS NUMERIC(15,2); CREATE DOMAIN PKField AS INTEGER; CREATE DOMAIN TMonth AS SMALLINT CHECK (VALUE BETWEEN 1 AND 12); CREATE DOMAIN TYear AS SMALLINT CHECK (VALUE BETWEEN 1990 AND 2100);. Просмотреть список доменов, определенных в БД, и структуру каждого из них можно в IBExpert с помощью инспектора объектов. Определение существующего домена можно изменить с помощью запроса ALTER DOMAIN. Этот запрос позволяет: - удалить существующее и определить новое значение по умолчанию (заменяя при этом старое значение, если оно было указано); - удалить существующее и ввести новое ограничение целостности. Синтаксис запроса ALTER DOMAIN имеет следующий формат: ALTER DOMAIN имя домена { [SET DEFAULT { литерал NULL USER}] [DROP DEFAULT] [add [CONSTRAINT] CHECK (<ограничение цомена>)] [DROP CONSTRAINT] };, SET DEFAULT - указывает для существующего домена значение по умолчанию; DROP DEFAULT - для существующего домена удаляет значение по умолчанию; ADD [CONSTRAINT] CHECK - добавляет ограничение для существующего домена; DROP CONSTRAINT - удаляет CHECK ограничение из определения домена. Например, созданный домен Telephone можно изменить, удалив ограничение, следующим запросом: ALTER DOMAIN Telephone DROP CONSTRAINT; или установив другое значение по умолчанию следующим запросом: ALTER DOMAIN Telephone SET DEFAULT 111111;. Существующий домен можно удалить с помощью запроса DROP DOMAIN, имеющего следующий синтаксис: DROP DOMAIN имя домена;. Примечание. Домен не будет удален, если на него имеются какие-либо ссылки, т. е. существуют таблицы со столбцами, определенными на этом домене. Например, если попытаться на учебной БД удалить домен BOOLEAN: DROP DOMAIN BOOLEAN;, то будет выдано сообщение об ошибке следующего вида: column BOOLEAN is used in table REQUEST (local name EXECUTED) and cannot be dropped [столбец BOOLEAN используется в таблице REQUEST (локальное имя EXECUTED) и не может быть удален].
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |