Часть 4. Контроль целостности связей

Из перечисленных видов связи чаще используется связь вида 1:М. Связь вида 1:1 можно считать частным случаем связи 1:М, когда одной записи глав­ной таблицы соответствует одна запись вспомогательной таблицы. Связь М:1, по сути, является «зеркальным отображением» связи 1:М. Оставшийся вид связи М:М характеризуется как слабый вид связи или даже как отсутствие свя­зи. Поэтому в дальнейшем рассматривается связь вида 1:М.

Напомним, что при образовании связи вида 1:М одна запись главной таб­лицы (главная, родительская запись) оказывается связанной с несколькими записями дополнительной (дополнительные, подчиненные записи) и имеет место схема, показанная на рис. 6.

 

 

 
 

Рис. 6. Связь 1:М записей двух таблиц

 

Контроль целостности связей обычно означает анализ содержимого двух таблиц на соблюдение следующих правил:

1. каждой записи основной таблицы соответствует нуль или более записей дополнительной таблицы;

2. в дополнительной таблице нет записей, которые не имеют родительских записей в основной таблице;

3. каждая запись дополнительной таблицы имеет только одну родительскую запись основной таблицы.

 

Опишем действие контроля целостности при манипулировании данными в таблицах. Рассмотрим три основные операции над данными двух таблиц:

1. ввод новых записей,

2. модификацию записей,

3. удаление записей.

При рассмотрении попытаемся охватить все возможные методы организа­ции контроля целостности. В реальных СУБД могут применяться собствен­ные методы, подобные описываемым.

При вводе новых записей возникает вопрос определения последователь­ности ввода записей в таблицы такой, чтобы не допустить нарушение целост­ности. Исходя из приведенных правил, логичной является схема, при кото­рой данные сначала вводятся в основную таблицу, а потом — в дополнительную. Очередность ввода может быть установлена на уровне це­лых таблиц или отдельных записей (случай одновременного ввода в несколь­ко открытых таблиц).

В процессе заполнения основной таблицы контроль значений полей связи ведется как контроль обычного ключа (на совпадение со значениями тех же полей других записей). Заполнение полей связи дополнительной таблицы кон­тролируется на предмет совпадения со значениями полей связи основной таб­лицы. Если вновь вводимое значение в поле связи дополнительной таблицы не совпадет ни с одним соответствующим значением в записях основной таб­лицы, то ввод такого значения должен блокироваться.

Модификация записей. Изменение содержимого полей связанных запи­сей, не относящихся к полям связи, очевидно, должно происходить обычным образом. Нас будет интересовать механизм изменения полей связи.

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

 

Редактирование поля связи основной таблицы разумно подчинить одно­му из следующих правил:

1. редактировать записи, у которых нет подчиненных записей. Если есть подчиненные записи, то блокировать модификацию полей связи;

2. изменения в полях связи основной записи мгновенно передавать во все поля связи всех записей дополнительной таблицы (каскадное об­новление).

 

В операциях удаления записей связанных таблиц большую свободу, оче­видно, имеют записи дополнительной таблицы. Удаление их должно проис­ходить практически бесконтрольно.

Удаление записей основной таблицы логично подчинить одному из сле­дующих правил:

1. удалять можно запись, которая не имеет подчиненных записей;

2. запретить (блокировать) удаление записи при наличии подчиненных записей, либо удалять ее вместе со всеми подчиненными записями (кас­кадное удаление).