- Внешний ключ
-
Вне́шний ключ (англ. foreign key) — понятие теории реляционных баз данных, относящееся к ограничениям целостности базы данных.
Неформально выражаясь, внешний ключ представляет собой подмножество атрибутов некоторой переменной отношения R2, значения которых должны совпадать со значениями некоторого потенциального ключа некоторой переменной отношения R1.
Формальное определение. Пусть R1 и R2 — две переменные отношения, не обязательно различные. Внешним ключом FK в R2 является подмножество атрибутов переменной R2 такое, что выполняются следующие требования:
- В переменной отношения R1 имеется потенциальный ключ CK такой, что FK и CK совпадают с точностью до переименования атрибутов (то есть переименованием некоторого подмножества атрибутов FK можно получить такое подмножество атрибутов FK’, что FK’ и CK совпадают как по именами, так и по типам атрибутов).
- В любой момент времени каждое значение FK в текущем значении R2 идентично значению CK в некотором кортеже в текущем значении R1. Иными словами, в каждый момент времени множество всех значений FK в R2 является (нестрогим) подмножеством значений CK в R1.
При этом для данного конкретного внешнего ключа FK → CK отношение R1, содержащее потенциальный ключ, называют главным, целевым, или родительским отношением, а отношение R2, содержащее внешний ключ, называют подчинённым, или дочерним отношением.
Поддержка внешних ключей также называется соблюдением ссылочной целостности. Реляционные СУБД поддерживают автоматический контроль ссылочной целостности.
Пример
Предположим, что в базе данных имеется две таблицы: City (города) и Street (улицы), которые определяются следующим образом:
CREATE TABLE City ( id INTEGER NOT NULL PRIMARY KEY, name CHAR(40) ) CREATE TABLE Street ( id INTEGER NOT NULL PRIMARY KEY, name CHAR(40), id_city INTEGER NOT NULL FOREIGN KEY REFERENCES City )
Содержимое этих таблиц следующее:
CITY
ID NAME 1 Москва 2 Санкт-Петербург 3 Владивосток STREET
ID NAME ID_CITY 181 Малая Бронная 1 182 Тверской бульвар 1 183 Невский проспект 2 184 Пушкинская 2 185 Светланская 3 186 Пушкинская 3 Таблица STREET имеет поле ID_CITY, которое является внешним ключом и ссылается на таблицу CITY. Значение в этом поле соответствует первичному ключу в таблице CITY для того города, где расположена улица. Так, Невский проспект имеет ID_CITY=2, что соответствует Санкт-Петербургу (ID=2 в таблице CITY).
В таблице STREET находятся две улицы с одинаковым названием Пушкинская, которые отличаются значением поля ID_CITY. Одна из них находится в Санкт-Петербурге (ID_CITY=2), другая — во Владивостоке (ID_CITY=3).
Попытка внести в таблицу STREET улицу «Дерибасовская» с ID_CITY=4 вызовет ошибку нарушения ссылочной целостности, поскольку в таблице CITY нет города с ID=4. Однако после внесения в таблицу CITY города «Одесса» с ID=4, повторное внесение улицы «Дерибасовская» с ID_CITY=4 пройдёт успешно.
При удалении из таблицы CITY города Владивостока результат зависит от свойств внешнего ключа:
- Если для внешнего ключа разрешено удаление по цепочке, то вместе с удалением Владивостока будут удалены улицы Светланская и Пушкинская с ID=3.
- Если для внешнего ключа запрещено удаление по цепочке, то операция вызовет ошибку нарушения ссылочной целостности, так как в таблице STREET будут находиться улицы с кодом ID_CITY=3, который отсутствует в таблице CITY.
При изменении в таблице CITY кода города Санкт-Петербурга с 2 на 48 результат зависит от свойств внешнего ключа:
- Если для внешнего ключа разрешено изменение по цепочке, то вместе с изменением кода Санкт-Петербурга будут изменены значения ID_CITY для соответствующих улиц.
- Если для внешнего ключа запрещено изменение по цепочке, то операция вызовет ошибку нарушения ссылочной целостности, так как в таблице STREET будут находиться улицы с кодом ID_CITY=2, который отсутствует в таблице CITY.
Литература
- Дейт К. Дж. Введение в системы баз данных = Introduction to Database Systems. — 8-е изд. — М.: «Вильямс», 2006. — 1328 с. — ISBN 0-321-19784-4
См. также
Для улучшения этой статьи по информационным технологиям желательно?: - Проставив сноски, внести более точные указания на источники.
- Дополнить статью (статья слишком короткая либо содержит лишь словарное определение).
Базы данных Концепции Модель данных • Реляционная (модель • алгебра • Нормальная форма • Ссылочная целостность • БД • СУБД) • Иерархическая модель • Сетевая (модель • СУБД) • Объектно-ориентированная (БД • СУБД) • Транзакция • Журнализация • Секционирование
Объекты Ключи Потенциальный • Первичный • Внешний • Естественный • Суррогатный (искусственный) • Суперключ
SQL СУБД IMS • DB2 • Informix • Oracle Database • Microsoft SQL Server • Adaptive Server Enterprise • Teradata Database • Firebird • PostgreSQL • MySQL • SQLite • Microsoft Access • Visual FoxPro • ЛИНТЕР • CouchDB • MongoDB
Компоненты Категория:- Реляционная модель данных
Wikimedia Foundation. 2010.