Пример простого внешнего ключа
. Это пример простого внешнего ключа, соответствующего простому же родительскому ключу.
Если родительский ключ составной, то ссылающийся на него внешний также составной. Например, пусть наша БД должна хранить сведения о том, какой служащий какие манипуляции с записями о поставках проделывал. Тогда схема БД может содержать фрагмент[19], показанный на рис. 2.4.
Рис. 2.4 Составной внешний ключ {S#, P#, J#}
Здесь отношение A_SPJ содержит составной внешний ключ {S#, P#, J#}, ссылающийся на первичный ключ {S#, P#, J#} отношения SPJ, и простой внешний ключ {Emp#}, ссылающийся на первичный ключ {Emp#} отношения Emp.
Замечание 7. Внешний ключ может полностью входить в состав возможного ключа отношения В, как в предыдущем примере, но может и не входить в него вообще или входить частично.
Например, пусть в нашей БД хранятся сведения о городах размещения поставщиков, деталей и изделий. Соответствующий фрагмент схемы БД показан на рис. 2.5. Здесь атрибуты отношений S, P, J, помеченные символом (FK), – внешние ключи, ссылающиеся на отношение Ct. Включать их в состав возможных (первичных) ключей отношений-потомков нет необходимости.
|
Рис. 2.5 Внешний ключ *.название не входит в состав первичного
ключа потомка
Замечание 8. Отношение может быть одновременно ссылочным и ссылающимся.
Так, на рис. 2.5 отношения S, P и J являются ссылочными для отношения SPJ и ссылающимися на отношение Сt.
Замечание 9. Отношение может ссылаться на себя, т.е. внешний ключ может быть потомком первичного ключа собственного отношения.
Например, в БД бюро ЗАГС может существовать отношение, показанное на рис. 2.6. Здесь атрибут номер паспорта - ссылочный ключ, а атрибут супруг.номер паспорта – ссылающийся на него внешний ключ.
Рис. 2.6 Унарная связь. Отношение ссылается на себя