Объявление домена
. Домен на самом деле есть то, что в современных языках программирования называется «тип данных, определенный пользователем». К сожалению, большинство современных СУБД не поддерживает домены как объекты БД.
Определение домена может выглядеть так:
CREATE DOMAIN имя-домена тип [(длина)]
{FOR ALL имя-домена (предикат)}|
{VALUES (список)};
Здесь имя-домена
– уникальное имя, под которым домен будет известен системе и на которое можно ссылаться в определениях отношений;
тип – один из поддерживаемых системой встроенных типов данных;
длина
– длина поля данных в байтах;
предикат
– логическое выражение, использующее имя-домена в качестве переменной;
список
– список значений, разделенных запятыми.
Эта декларация объявляет системе, что она должна внести в свой каталог имя нового объекта – домена, и указывает ограничения на значения, принадлежащие домену. Определение сохраняется в системном каталоге. При любой попытке обновления значения какого-либо атрибута, определенного на этом домене, будет вычислено значение предиката. Если оно окажется равным .F., обновление будет отвергнуто.
Пример 1.
CREATE DOMAIN день CHAR (2)
FOR ALL день (
день = ‘пн’ OR
день = ‘вт’ OR
день = ‘ср’ OR
день = ‘чт’ OR
день = ‘пт’ );
Это же можно записать короче:
CREATE DOMAIN день CHAR (2)
VALUES(‘пн’, ‘вт’, ‘ср’, ‘чт’, ‘пт’);
Если, скажем, в ИС банка на этом домене определен атрибут рабочий день, то система сможет заблокировать выполнение банковских операций по субботам и воскресеньям.
Пример 2.
CREATE DOMAIN вес INTEGER
FOR ALL вес (вес ³ 10 AND вес £ 150 AND mod(вес, 5) = 0);
Каждый атрибут, определенный на этом домене, может принимать целочисленные значения в интервале [10, 150], причем только такие, которые делятся на 5 без остатка.
Если есть возможность создать домен, должна быть и возможность удалить его. Следующая команда
DESTROY DOMAIN имя-домена;
удалит из системного каталога определение домена. Она будет исполнена, если в схеме БД нет ни одного атрибута, определенного на удаляемом домене.
Если система поддерживает домены, то в ней есть возможность выполнения запросов, основанных на доменах. Например, запрос
Какие отношения в БД содержат какую-либо информацию о весе?
в терминах доменов имеет вид:
Какие отношения в БД включают атрибуты, определенные на домене Вес?
Это запрос к системному каталогу. В системе, не поддерживающей домены, такие сведения практически невозможно получить.