Модели и проектирование баз данных

Предложение объявления базового отношения


имеет вид:

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;

Здесь кроме составного первичного ключа {S#, P#, J#, Dt} указан простой альтернативный ключ {SPJ#}, а также внешние ключи {S#}, {P#}, {J#}. Для внешних ключей определены правила отложенного удаления и каскадного обновления. Это означает, что удаление кортежа родителя не может быть выполнено, если в SPJ существует хотя бы один кортеж, ссылающийся на удаляемое значение родительского ключа. Удаление родительского кортежа произойдет автоматически после удаления последней ссылки на него. Если же пользователь изменит значение какого-либо родительского ключа, то во всех кортежах SPJ, ссылающихся на старое значение, произойдут соответствующие изменения.

Базовое отношение может быть уничтожено командой

DESTROY BASE RELATION имя-отношения;

Команда удалит из системного каталога все сведения об указанном отношении, но будет выполнена, только если тело отношения пусто. Будут удалены также все производные отношения, в определениях которых есть ссылки на удаляемое.


Содержание раздела