Правила ссылочной целостности
Для решения перечисленных проблем, возникающих при вставке, обновлении и удалении строк связанных таблиц, предусмотрены правила ссылочной целостности (referential integrity, 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).
Дата добавления: 2015-02-03; просмотров: 1300;