Правила ссылочной целостности

Для решения перечисленных проблем, возникающих при вставке, обновлении и удалении строк связанных таблиц, предусмотрены правила ссылочной целостности (referential integ­rity, RI). Правила ссылочной целостности – это логические конструкции, которые выражают бизнес-правила использования данных и представляют собой правила вставки, замены и удаления. При генерации схемы базы данных на основе опций логической модели, задаваемых в закладке Rolename/RI Actions, будут сгенерированы правила декларативной ссылочной целостности, которые должны быть предписаны для каждой связи, и триггеры, обеспечивающие ссылочную целостность. Триггеры представляют собой программы, выполняемые всякий раз при выполнении команд вставки, замены или удаления (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).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: