Внешние ключи
. Рассмотрим отношение SPJ[16]
(ПОСТАВКА). Оно содержит атрибуты S#, P#, J#, значения которых указывают, какой ПОСТАВЩИК, для какого ИЗДЕЛИя поставил данный вид ДЕТАЛи. Это отношение могло бы иметь кортеж {‘S3’, ‘P1’, ‘J8’, 500} – «поставщик ‘S3’ выполнил для изделия ‘J8’ поставку детали ‘P1’ в количестве 500 штук». Здесь значение ‘S3’ – ссылка на кортеж отношения S с таким же значением первичного ключа. Аналогичны роли значений ‘P1’, ‘J8’. Атрибуты S#, P#, J# в схеме отношения SPJ поддерживают связи отношений S, P и J. Любой кортеж SPJ можно трактовать как экземпляр связи этих отношений. Он представляет в БД реально существующий факт выполнения поставки конкретного вида детали конкретным поставщиком для конкретного изделия. Отношение SPJ – это пример механизма представления связей объектов в РМД.
Если объекты связаны, то первичные ключи соответствующих им отношений обязательно совмещаются в схеме какого-либо отношения[17]. В этой схеме они называются внешними ключами.
Определение 2.
Пусть В – базовое отношение и FK – некоторое подмножество атрибутов его схемы FK Ì B ( ).
FK
называется внешним ключом
(Foreign Key) отношения В, если
А) существует базовое отношение А с первичным ключом РК (Primary Key);
Б) каждое значение FK в текущем значении В
всегда совпадает со значением РК некоторого кортежа в текущем значении А.
Отношения А и В называются связанными. Отношение А называется родительским или ссылочным, В – потомком или ссылающимся. РК называют родительским (ссылочным) ключом. FK – ключом-потомком (ссылающимся).
Замечание 5. Определение не утверждает, что каждому значению РК из кортежа в текущем значении А должно соответствовать такое же значение FK в текущем значении отношения В.
Так, вполне допустимо такое состояние БД, в котором есть кортеж отношения S со значением S# = ‘S12’, но в отношении SPJ нет ни одного кортежа с таким значением S#. Это просто означает, что к настоящему моменту не зарегистрировано ни одной поставки, выполненной этим поставщиком.
Замечание 6. Состав атрибутов внешнего ключа должен совпадать с составом атрибутов родительского ключа. Точнее: множества PK и FK
пар (домен, атрибут) должны быть эквивалентны.
Так, атрибут SPJ.S# является внешним ключом отношения SPJ, ссылающимся на родительский ключ S.S#. Оба атрибута определены на одном и том же домене и имеют одинаковые имена