Домены (области значений) в SQL
1) Понятие домена
Домен или область допустимых значений столбца определяет пользовательский тип данных и позволяет дополнительно указать:
a) Значение по умолчанию.
b) Ограничения на значения.
c) Правила проверки ограничений.
d) Время проверки ограничений.
e) Правила сравнения (для символьного типа).
2) Создание домена
CREATE DOMAIN <имя домена> [AS] <тип данных> [(<размер>)] [DEFAULT <значение по умолчанию>] [[<имя ограничения>] <проверка ограничения>]
[[NOT] DEFERRABLE]
[INITIALLY IMMEDIATE|DEFERRED]]
[COLLATE <имя сопоставления>]
Пример:
CREATE DOMAIN DComm AS Decimal CHECK (Comm > 0)
3) Изменение домена
ALTER DOMAIN <имя домена>
{SET DEFAULT <значение по умолчанию> |
DROP DEFAULT|ADD <имя ограничения> |
DROP CONSTRAINT <имя ограничения>}
Пример:
ALTER DOMAIN DSNUM ADD Range_chech CHEK (SNum BETWEEN 1000 AND 10000)
4) Удаление домена
DROP DOMAIN <имя домена> CASCADE|RESTRICT
5) Ключевые слова
a) [NOT] DEFERRABLE
Устанавливает [не] отсроченную проверку ограничения на значения столбца.
По умолчанию действует NOT.
Его обычно указывают для столбцов с PK, UNIQUE, многих ограничений для столбца.
Отсроченную проверку чаще указывают для утверждений.
b) INITIALLY IMMEDIATE|DEFERRED
Используется вместе с DEFERRABLE и устанавливает режим проверки ограничения столбца.
IMMEDIATE (немедленный) – после каждого оператора обновления.
DEFERRED (отсроченный) – по окончанию транзакции, т.е. после оператора COMMIT.
c) CASCADE и RESTRICT
CASCADE – при удалении домена тип данных домена, значение по умолчанию и ограничения столбца передаются в виде соответствующих типов данных, значений по умолчанию и ограничений на соответствующие столбцы таблиц.
RESTRICT – запрещает удалять используемый домен.
d) CHECK
Ограничение CHECK на значение столбца может включать проверки для других столбцов, если они включены в подзапрос в разделе WHERE.
Следовательно, <предикат> может стать ложным, если не выполняется условие не проверяемого, а кого-то другого столбца и будет ошибка.
6) Особенности значения по умолчанию
При определении начального значения домена могут быть указаны:
— Константа: число, строка, дата.
— Переменная: Current_user, Current_connection, …
— Предварительно определенный литерал даты.
— NULL.