Название: Базы данных. Концепция баз данных, реляционная модель данных, языки SQL и XML (Токмаков Г. П.)

Жанр: Информационные системы и технологии

Просмотров: 1417


2.3.3. правила ссылочной це лостн о с т и

 

Для решения перечисленных проблем, возникающих при вставке, обновле- нии и удалении строк связанных таблиц, предусмотрены правила ссылочной целостности (referential integrity, RI). Правила ссылочной целостности   – это логические конструкции, которые выражают бизнес-правила использования данных и представляют собой правила вставки, замены и удаления. При гене- рации схемы базы данных эти логические конструкции будут реализованы в вде правил декларативной ссылочной целостности, которые должны быть предписаны для каждой связи, и триггеры, обеспечивающие ссылочную цело- стность. Триггеры представляют собой программы, выполняемые всякий раз при выполнении команд вставки, замены или удаления (INSERT, UPDATE или DELETE).

Правило RESTRICT:

– запрещает удаление строки из таблицы-предка, если строка имеет потом- ков. Инструкция DELETE, пытающаяся удалить такую строку, отбрасывается, и вы- дается сообщение об ошибке;

– запрещает обновление первичного ключа в строке таблицы-предка, если у строки есть потомки. Инструкция UPDATE, пытающаяся изменить значение пер- вичного ключа в строке-предке, отбрасывается, и выдается сообщение об ошибке;

Правило CASCADE:

– определяет, что при удалении строки-предка все строки-потомки также ав-

томатически удаляются из таблицы-потомка;

– определяет, что при изменении значения первичного ключа в строке-предке соответствующее значение внешнего ключа в таблице-потомке также автоматиче-

ски изменяется во всех строках-потомках таким образом, чтобы соответствовать новому значению первичного ключа.

Правило SET  NULL:

– определяет, что при удалении строки-предка внешним ключам во всех ее строках-потомках автоматически присваивается значение NULL;

– определяет, что  при  обновлении значения  первичного ключа  в  строке-

предке внешним ключам во всех ее строках-потомках автоматически присваива-

ется значение NULL.

Правило SET  DEFAULT:

– определяет, что при удалении строки-предка внешним ключам во всех ее строках-потомках автоматически присваивается определенное значение, по умол-

чанию установленное для данного столбца;

– определяет, что  при  обновлении значения  первичного ключа  в  строке-

предке внешним ключам во всех ее строках-потомках автоматически присваива-

ется определенное значение, по умолчанию установленное для данного столбца.

Правило NONE:

– определяет, что при удалении строки-предка значения внешних ключей во всех ее строках-потомках не меняются;

– определяет, что  при  обновлении значения  первичного ключа  в  строке-

предке значения внешних ключей во всех ее строках-потомках не меняются.

Обычно правило NONE используется в «плоских» таблицах, так как в на- стольных или файл-серверных системах функциональность, обеспечивающая правила ссылочной целостности, реализуется в клиентском приложении.

Рассмотрим применение правил ссылочной целостности на примере одной из связей предок/потомок учебной базы данных. Относительно таблиц SLUZHASCHIE и OFFISY, связанных отношением предок-потомок, вышеописанные

проблемы добавления, обновления и удаления с использованием перечислен-

ных правил решаются следующим образом:

1. Проблема, возникающая при добавлении новой строки потомка, решается путем проверки значений в столбцах внешнего ключа перед выполнением инст-

рукции INSERT. Если они не равны ни одному из значений первичного ключа, то инструкция INSERT отбрасывается и выдается сообщение об ошибке. Другими словами применяется правило RESTRICT.

2. Проблема,  возникающая  при  обновлении  внешнего  ключа  в  строке- потомке, решается аналогично: путем проверки нового значения в столбцах внешнего ключа перед выполнением инструкции UPDATE. Если оно не равно ни

одному из значений первичного ключа, то инструкция UPDATE отбрасывается и выдается сообщение об ошибке. То есть в данном случае также применяется правило RESTRICT.

3. Проблема удаления строки-предка является более сложной. При этом в зависимости от ситуации можно:

– Не удалять из базы данных отдел до тех пор, пока сотрудники не будут пе-

реведены в другой отдел. Другими словами применяется правило RESTRICT;

– Автоматически удалить сотрудников, работавших в данном отделе, т. е.

применить правило CASCADE;

– в столбце «ID_OFC» установить для сотрудников, работавших в данном отде- ле, значение NULL, показывая, что номер их отдела пока не определен. Это означа- ет применение правила SET NULL;

– в столбце «ID_OFC» для сотрудников, работавших в данном отделе, устано- вить значение по умолчанию некоторое значение, указывая, что сотрудники пере- водятся в этот отдел. Это означает применение правила SET DEFAULT.

4. Проблема обновления внешнего ключа в строке-предке решается анало-

гично предыдущей:

– не изменять «ID_OFC» до тех пор, пока сотрудники не будут переведены в другой отдел (правило RESTRICT);

– автоматически обновить поле «ID_OFC» для сотрудников, работавших в дан-

ном отделе (правило CASCADE);

– в столбце «ID_OFC» установить для сотрудников, работавших в данном отде- ле, значение NULL, показывая, что номер их отдела пока не определен (правило SET NULL);

– в столбце «ID_OFC» для сотрудников, работавших в данном отделе, устано- вить значение по умолчанию некоторое значение, указывая, что сотрудники пере- водятся в этот отдел (правила SET DEFAULT).