YourLib.net
Твоя библиотека
Главная arrow Базы данных. Проектирование и создание (С.М. Диго) arrow 4.9.2. Ограничения целостности связи
4.9.2. Ограничения целостности связи

4.9.2. Ограничения целостности связи

   При описании связи можно задать ограничения целостности связи. Для этого следует воспользоваться вкладкой RI Actions (рис. 4.70) в окне редактора связей.

Рис. 4.70. Выбор вкладки RI Actions для задания ограничений целостности связи 

Рис. 4.70. Выбор вкладки RI Actions для задания ограничений целостности связи

   Вид окна Relationships для этой вкладки показан на рис. 4.71. Для каждой связи можно задать действия, которые будут выполняться при удалении (Delete), вставке (Insert) и удалении (Update) как порожденной (Child), так и родительской (Parent) сущности.

 Рис. 4.71. Окно задания ограничения целостности связи

Рис. 4.71. Окно задания ограничения целостности связи

   Для каждой из корректирующих операций можно выбрать следующее действие:
   • NONE - действие не оказывает влияние на связанные записи;
   • RESTRICT - действие запрещено (при определенных условиях);
   • CASCADE - действие вызывает изменения в связанных записях;
   • SET DEFAULT - устанавливается значение по умолчанию для поля связи;
   • SET Null - устанавливается по умолчанию значение Null для поля связи.
   Набор возможных значений и значения, выбранные системой по умолчанию, будут зависеть от характеристик связи, для которой задаются ограничения целостности.
   Как видно из рис. 4.48, связь «ПОДРАЗДЕЛЕНИЕ - СОТРУДНИК» была задана как неидентифицирующая с обязательным классом членства объектов в связи (Not Null). В этом случае каждый из списков, определяющих действия, выполняемые при корректировке, имеет четыре возможных значения: NONE (никакой), RESTRICT (ограничивать), CASCADE (каскад), SET DEFAULT (значение по умолчанию). На рис. 4.71 показаны значения RI Actions для связи «ПОДРАЗДЕЛЕНИЕ - СОТРУДНИК», заданные системой по умолчанию.Если изменить характер связи и определить класс членства как необязательный
   (Nulls Allowed), то выбранные по умолчанию значения для ограничений целостности будут иные (рис. 4.72).

Рис. 4.72. Значения по умолчанию для неидентифицирующей связи с необязательным классом членства объектов 

Рис. 4.72. Значения по умолчанию для неидентифицирующей связи с необязательным классом членства объектов

   Выбор значения SET NULL для операции удаления родительской сущности в этом случае означает, что всем сотрудникам отдела, который удаляется (Parent Delete), в качестве значения поля ПОДРАЗДЕЛЕНИЕ будет присвоено значение NULL.
   Для случая изменения значения поля КОДА ПОДРАЗДЕЛЕНИЯ (Parent Update) в нашем случае следует выбрать CASCADE, что будет вызывать каскадное изменение соответствующих значений внешнего ключа для записей всех сотрудников, работающих в данном отделе.
   Рассмотрим другую связь, а именно «СОТРУДНИК - ЗАГРАНПАСПОРТ» (рис. 73).

 Рис. 4.73. Описание связи «СОТРУДНИК - ЗАГРАНПАСПОРТ»

Рис. 4.73. Описание связи «СОТРУДНИК - ЗАГРАНПАСПОРТ»

   Как мы видим, и в этом примере связь была задана как неидентифицирующая с обязательным классом членства объектов в связи (Not Null). Но в рассматриваемом случае для операции Parent Delete следует выбрать действие CASCADE. Если КОД СОТРУДНИКА может изменяться, то для операции Parent Update также следует выбрать действие CASCADE.
   Так как связь «многие-ко-многим» в реляционной модели не поддерживается, то на уровне логической модели нет смысла (и, как следствие, нет возможности) задавать действия при корректировке сущностей, связанных таким типом связи. При необходимости можно перейти к уровню физической модели и скорректировать ограничения связи для связей, появляющихся в физической модели взамен связи «многие-ко-многим».
   Как было отмечено выше, выбор режима действий при выполнении корректирующих операций будет зависеть от типа связи между сущностями, а также от особенностей предметной области. В табл. 4.2 приведены возможные режимы для каждого вида связи. Значения по умолчанию выделены полужирным курсивом с подчеркиванием.

Таблица 4.2. Ограничения целостности связи

Таблица 4.2. Ограничения целостности связи 

Окончание табл. 4.2.

Окончание табл. 4.2.

   Значения ограничений можно изменить, выбрав позицию меню Model/Validation Rules, и в появившемся окне (рис. 4.74) на вкладке RI Default задать нужные значения соответствующих параметров.

 Рис. 4.74. Окно Model Properties. Ограничения целостности, задаваемые по умолчанию (RI defaults)

Рис. 4.74. Окно Model Properties. Ограничения целостности, задаваемые по умолчанию (RI defaults)

   Обычно удаление зависимой записи (Child Delete) при любом из типов связи не требует дополнительных проверок на допустимость корректировки и не приводит к изменениям в связанных записях. Поэтому режимом по умолчанию для всех типов связи является NONE. Дополнительная проверка может потребоваться, если в предметной области невозможно существование «главного» объекта без связанных с ним «подчиненных» объектов. Например, не может быть ОТДЕЛА без СОТРУДНИКОВ. В этом случае либо не должна быть допущена попытка удаления последнего сотрудника из отдела, либо при этом должен быть удален отдел.
   Как правило, вставка зависимой записи при наличии идентифицирующей связи не может быть произведена, если отсутствует соответствующая ей запись в главной таблице (ситуация, когда в главной таблице нет записи со значением ключа, равным введенному значению поля связи), т.е. используется режим RESTRICT. Можно представить себе такую организацию ведения таблиц базы данных, когда в основную таблицу при вводе зависимой записи автоматически вводится новая запись с ключом, соответствующим значению поля связи зависимой записи. Но такой возможностью не надо злоупотреблять, так как отсутствующее значение может быть вызвано ошибкой при вводе данных, а не отсутствием информации в базе данных. Режим NONE при вставке зависимой записи при наличии идентифицирующей связи использовать не следует. Если в предметной области возникает необходимость вставить зависимый объект, не связанный с основным объектом (т.е. класс членства объекта в связи - необязательный), то для связи таких объектов следует выбрать неидентифицирующую связь.
   Так называемая «категориальная» связь является особой связью: с одной стороны, она является идентифицирующей связью, а с другой - связывает не две разные сущности, а отражает информацию об одном и том же объекте. Для обобщенного объекта желательно иметь специальный инструмент, который позволял бы рассматривать его как единое целое. В ERWin можно задавать ограничения целостности только для каждой отдельной связи, соединяющей родовой объект с каждым из видовых объектов.
   Для того чтобы заданные ограничения целостности отражались при изображении модели, можно в меню Format/Relationship Display/Referential Integrity отметить позицию Referential Integrity (рис. 4.75).

Рис. 4.75. Меню Format/Relationship Display/Referential Integrity 

Рис. 4.75. Меню Format/Relationship Display/Referential Integrity

   После такого выбора на схеме ER-модели на обоих концах каждой линии связи будут отображаться значения ограничений целостности связи. Они задаются двумя латинскими буквами, разделенными двоеточием (рис. 4.76). Первая буква обозначает операцию, вторая - действия, предусмотренные при выполнении данной операции. Например, D:C означает, что при выполнении удаления экземпляра сущности (Delete) будет осуществляться каскадное удаление связанных сущностей (Cascade).

 Рис. 4.76. Вид ER-диаграммы с заданными ограничениями целостности

Рис. 4.76. Вид ER-диаграммы с заданными ограничениями целостности

 
< Пред.   След. >