Внешний Лондон
- 1 year ago
- 0
- 0
Вне́шний ключ ( англ. foreign key ) — понятие теории реляционных баз данных , относящееся к ограничениям целостности базы данных .
Неформально выражаясь, внешний ключ представляет собой подмножество атрибутов некоторой переменной отношения R 2 , значения которых должны совпадать со значениями некоторого потенциального ключа некоторой переменной отношения R 1 .
Формальное определение. Пусть R 1 и R 2 — две переменные отношения, не обязательно различные. Внешним ключом FK в R 2 является подмножество атрибутов переменной R 2 такое, что выполняются следующие требования:
При этом для данного конкретного внешнего ключа FK → CK отношение R 1 , содержащее потенциальный ключ, называют главным , целевым , или родительским отношением, а отношение R 2 , содержащее внешний ключ, называют подчинённым , или дочерним отношением.
Поддержка внешних ключей также называется соблюдением ссылочной целостности . Реляционные СУБД поддерживают автоматический контроль ссылочной целостности.
Предположим, что в базе данных имеется две таблицы: 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(id)
)
Содержимое этих таблиц следующее:
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 города Владивостока результат зависит от свойств внешнего ключа:
При изменении в таблице CITY кода города Санкт-Петербурга с 2 на 48 результат зависит от свойств внешнего ключа:
|
В другом языковом разделе
есть более полная статья
(англ.)
.
|