Предложение объявления базового отношения
имеет вид:
CREATE BASE RELATION имя-отношения
(список-определений-атрибутов)
список-определений-возможных-ключей
список-определений-внешних-ключей;
Здесь список-определений ... – список разделенных запятыми строк определений соответствующих элементов схемы отношения.
Строка определения атрибута связывает имя атрибута с его доменом:
имя-атрибута
DOMAIN (имя-домена).
Указанный атрибут принимает значения на указанном домене.
Например, строка определения атрибута We
в предложении определения отношения P (см. рис. 2.3) может иметь вид:
We DOMAIN (вес),
где домен вес
определен в п. 2.4.1, пример 2.
Имена атрибутов должны быть уникальны, по крайней мере, в пределах отношения. Удобно, если имя атрибута совпадает с именем домена, на котором он определен.
Строка определения возможного ключа имеет две модификации:
PRIMARY KEY (список-атрибутов) |
CANDIDATE KEY (список-атрибутов)
Здесь PRIMARY KEY и CANDIDATE KEY объявляют, соответственно, первичный и альтернативный ключи отношения;
список-атрибутов
– список разделенных запятыми имен атрибутов, образующих ключ.
Например, первичный ключ отношения SPJ (см. рис. 2.3) будет объявлен строкой
PRIMARY KEY (S#, P#, J#, Dt),
а альтернативный ключ того же отношения – строкой
CANDIDATE KEY (SPJ#)
Строка определения внешнего ключа имеет вид:
FOREIGN KEY (список-атрибутов)
REFERENCES отношение
DELETE правило-удаления
UPDATE правило-обновления
Здесь список-атрибутов
– список разделенных запятыми имен атрибутов (составного) внешнего ключа, эквивалентный списку атрибутов родительского ключа;
отношение
– имя родительского отношения;
правило ...
следует понимать как ссылку на процедуру БД, реализующую определенное проектировщиком правило внешнего ключа для операции DELETE или UPDATE соответственно. Это может быть либо процедура пользователя, либо одна из стандартных процедур СУБД – Cascade (каскадировать) или Restrict (отложить).
Примеры.
Будем считать, что все необходимые домены определены, и приведем предложения определения схем отношений ПОСТАВЩИК и ПОСТАВКА.
Отношение ПОСТАВЩИК не содержит ни альтернативных, ни внешних ключей и определяется предложением
CREATE BASE RELATION S |
|||
( S# |
DOMAIN |
(S#), |
|
Sn |
DOMAIN |
(Sn), |
|
St |
DOMAIN |
(St), |
|
Ci |
DOMAIN |
(Ci) |
|
) |
|||
PRIMARY KEY (S#); |
CREATE BASE RELATION SPJ |
||||
( S# |
DOMAIN |
(S#), |
||
P# |
DOMAIN |
(P#), |
||
J# |
DOMAIN |
(J#), |
||
Dt |
DOMAIN |
(Dt), |
||
SPJ# |
DOMAIN |
(SPJ#), |
||
Qt |
DOMAIN |
(Qt) |
||
) |
||||
PRIMARY KEY (S#, P#, J#, Dt) |
||||
CANDIDATE KEY (SPJ#) |
||||
FOREIGN KEY (S#) REFERENCES S DELETE Restrict UPDATE Cascade |
||||
FOREIGN KEY (P#) REFERENCES P DELETE Restrict UPDATE Cascade |
||||
FOREIGN KEY (J#) REFERENCES J DELETE Restrict UPDATE Cascade; |
||||
Базовое отношение может быть уничтожено командой
DESTROY BASE RELATION имя-отношения;
Команда удалит из системного каталога все сведения об указанном отношении, но будет выполнена, только если тело отношения пусто. Будут удалены также все производные отношения, в определениях которых есть ссылки на удаляемое.