Модели и проектирование баз данных

       

Ссылочная целостность


. Нет никакого смысла хранить в БД кортежи отношения-потомка, ссылающиеся на кортежи, не существующие в родительском отношении. Так, если не существует в текущем значении отношения S кортежа со значением S# = ‘S3’, то кортеж {‘S3’, ‘P1’, ‘J8’, 500}  не имеет права на существование в текущем значении отношения SPJ. Включающее его состояние БД не может быть интерпретировано.

 

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

Эта формулировка, как, впрочем, и определение внешнего ключа, неточна. Если строго ей следовать, то окажутся недопустимыми Null-значения внешних ключей. Это логически неоправданный запрет. Ситуации, в которых значения атрибутов внешнего ключа неизвестны или вообще не могут быть определены, возникают очень часто.

Так, в примере, показанном на рис. 2.6, не во всех кортежах отношения ЛИЦО

внешний ключ супруг.номер паспорта будет иметь определенные значения. Бывают ведь и холостяки, и разведенные.

Разумно не разрешать Null-значения внешнего ключа, входящего в состав первичного ключа потомка. Этого и не допускает требование целостности сущности. Но если атрибут внешнего ключа не входит в состав первичного ключа потомка, то он может принимать Null-значения.

Имея это в виду, следует сформулировать пункт Б) определения внешнего ключа (см. п. 2.3.4) так:

         Б) каждое значение FK в текущем значении В

всегда или совпадает со значением РК

некоторого кортежа в текущем значении А, или является Null-значением.

Более точная формулировка требования ссылочной целостности такова:

         ни в какой момент времени в БД не может быть определенных (не Null-) значений ссылающегося ключа, которых нет среди существующих значений родительского ключа.

Это, как и предыдущие два требования, метаправило. Оно означает, что в каждой конкретной РБД должны быть определены специальные правила (правила внешних ключей), поддерживающие требование ссылочной целостности.



Содержание раздела