Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Базы данных.doc
Скачиваний:
160
Добавлен:
16.03.2016
Размер:
6 Мб
Скачать
☆

15.3.2. Примеры определений доменов

В дальнейших примерах нам понадобятся определения нескольких доменов. Приведем их в этом подразделе. В примерах мы будем иметь дело с таблицами служащих (EMP), отделов (DEPT) и проектов (PRO). Каждый служащий обладает уникальным номером (EMP_NO) и получает заработную плату (SALARY). Определим домены EMP_NO и SALARY.

CREATE DOMAIN EMP_NO AS INTEGER

CHECK (VALUE BETWEEN 1 AND 10000);

Номера служащих являются целыми числами, поэтому базовый тип домена EMP_NOесть типINTEGER. Кроме того, на значения этого домена устанавливается следующее ограничение: они должны быть больше нуля и не превосходить целое значение 10000.

Домен SALARYопределим следующим образом:

CREATE DOMAIN SALARY AS NUMERIC (10, 2)

DEFAULT 10000.00

CHECK (VALUE BETWEEN 10000.00 AND 20000000.00)

CONSTRAINT SAL_NOT_NULL CHECK (VALUE IS NOT NULL);

Размер заработной платы является значением точного числового типа NUMERICиз десяти десятичных цифр, две из которых составляют дробную часть. По умолчанию размер

93 Более подробно мы обсудим допустимые в SQL виды условных выражений в следующих лекциях.

заработной платы составляет 10000 руб. Установлен диапазон допустимого размера зарплаты от 10000 руб. до 20000000 руб. Неопределенное значение зарплаты не допускается (на уровне определения домена).

15.3.3. Изменение определения домена

Для изменения характеристик ранее определенного домена используется оператор SQL ALTER DOMAIN. Синтаксис этого оператора выглядит следующим образом:

domain_alternation ::=

ALTER DOMAIN domain_name domain_alternation_action

domain_alternation_action ::=

domain_default_alternation_action

| domain_constraint_alternation_action

Как видно из синтаксических правил, при изменении определения домена можно выполнить действие по изменению раздела значения по умолчанию либо изменить ограничение домена. Для первого варианта действует следующий синтаксис:

domain_default_alternation_action ::=

SET default_definition

| DROP DEFAULT

В случае установки нового значения по умолчанию (SET) это значение автоматически применяется ко всем столбцам, определенным на данном домене. Более точно, это значение становится новым значением по умолчанию. Операция не оказывает влияния на состояние существующих строк таблиц базы данных. В случае отмены раздела значения по умолчанию в определении домена (DROP) существовашее значение домена по умолчанию становится значением по умолчанию каждого столбца, который определен на данном домене и для которого не специфицировано собственное значение по умолчанию.

Действие по изменению ограничения домена определяется следующим синтаксисом:

domain_constraint_alternation_action ::=

ADD domain_constraint_definition

| DROP CONSTRAINT constraint_name

Действие по добавлению нового определения ограничения домена (ADD) приводит к тому, что новое условие добавляется черезANDк существующему ограничению домена. Если к моменту выполнения соответствующего оператораALTER DOMAINсуществуют столбцы некоторых таблиц, текущие значения которых противоречат новому ограничению, то СУБД должна отвергнуть этот операторALTER DOMAIN. Действие по отмене ограничения домена (DROP) приводит к исчезновению соответствующей части общего ограничения соответствующего домена, что, естественно, не влияет на существующие значения столбцов имеющихся таблиц.