Объекты реального мира представлены в реляционной БД как кортежи нескольких нормализованных отношений, которые связаны между собой. В таком случае:
- связи между этими отношениями описаны терминами функциональных зависимостей;
- отражение функциональных зависимостей между кортежами различных отношений происходит с помощью дублирования первичного ключа родительского отношения в дочернее.
Атрибуты, которые представляют собой копии ключей родительских отношений, называют внешними ключами.
Определим требование целостности ссылок:
Для каждого значения внешнего ключа, которое появляется в дочернем отношении, должен найтись кортеж в родительском отношении с одинаковым значением первичного ключа.
Пример.
Рассмотрим отношения ОТДЕЛ (НОМЕР_ОТДЕЛА, НАЗВАНИЕ_ОТДЕЛА) и СОТРУДНИК (НОМЕР_СОТРУДНИКА, НОМЕР_ОТДЕЛА, ФАМИЛИЯ_СОТРУДНИКА). В них хранится информация о сотрудниках организации и отделах, в которых они работают. Родительским является отношение ОТДЕЛ, следовательно, его первичный ключ НОМЕР_ОТДЕЛА входит в дочернее отношение СОТРУДНИК. Требование целостности ссылок означает в этом случае, что в таблице СОТРУДНИК не может находиться кортеж со значением атрибута НОМЕР_ОТДЕЛА, которое не находится в таблице ОТДЕЛ. При отсутствии такого значения в отношении ОТДЕЛ значение внешнего ключа считается неопределенным в отношении СОТРУДНИК.
Чаще всего поддержание целостности ссылок также обеспечивается системой управления базами данных. К примеру, СУБД может не разрешить пользователю ввести запись, которая содержит внешний ключ с неопределенным (несуществующим) значением.
Целостность ссылок часто называют ссылочной целостностью, целостностью связей или требованием внешнего ключа.
Операции, которые могут нарушить ссылочную целостность
Ссылочную целостность можно нарушить при выполнении операций, которые изменяют состояние БД. К таким операциям относится удаление, обновление и вставка кортежей в отношениях.
В определении ссылочной целостности берут участие 2 отношения – дочернее и родительское, в каждом же из них возможна каждая из трех названных операций. Поэтому рассмотрим 6 разных вариантов.
Родительское отношение
- Вставка кортежа – создается новое значение потенциального ключа. Поскольку в родительском отношении существование кортежей, на которые не существуют ссылки из дочернего отношения, допустимо, то при вставке кортежей в родительское отношение ссылочная целостность не нарушается.
- Обновление кортежа – приводит к возможному изменению значения потенциального ключа. При наличии кортежей в дочернем отношении, которые ссылаются на обновляемый кортеж, значения их внешних ключей будут некорректными. Следовательно, обновление кортежа может нарушить ссылочную целостность, если данное обновление имеет отношение к значению потенциального ключа.
- Удаление кортежа – происходит удаление значения потенциального ключа. При наличии кортежей в дочернем отношении, которые ссылаются на удаляемый кортеж, значения их внешних ключей будут некорректными. Следовательно, удаление кортежей может нарушить ссылочную целостность.
Дочернее отношение
- Вставка кортежа – невозможна, если значение внешнего ключа, которое вставляется, является некорректным. Следовательно, вставка кортежа может нарушить ссылочную целостность.
- Обновление кортежа – можно сделать попытку некорректного изменения значения внешнего ключа. Следовательно, обновление кортежа может нарушить ссылочную целостность.
- Удаление кортежа – не нарушает ссылочную целостность.