Базы данных реляционного типа: Внешние ключи
Вы уже знаете, что связь между двумя таблицами создается путём назначения общего поля в обе таблицы (см. Базы данных реляционного типа: Ключи таблиц). Это общее поле должно быть первичным ключом одной из таблиц. Рассмотрим связь между таблицей customer (клиент) и таблицей sale (продажа). Связь не очень полезна, если вместо использования первичного ключа customer_code в таблице sale используется другое поле, которое не является уникальным, например, имя клиента. В этом случае будет сложно точно определить, какой клиент совершил покупку. Таким образом, в таблице ниже customer_code называется foreign_key (внешним ключом) в таблице sale; другими словами, это первичный ключ во внешней таблице.
Внешние ключи позволяют реализовать так называемую справочную целостность. Это означает, что если внешний ключ содержит значение, это значение ссылается на существующую запись в связанной таблице. Например, рассмотрите таблицы ниже:
Таблица преподавателей
| Код | Имя | Фамилия |
|---|---|---|
| 1 | Anne | Cohen |
| 2 | Leonard | Clark |
| 3 | Vusi | Cave |
Таблица курсов
| Название курса | Код преподавателя |
|---|---|
| Введение в программирование | 1 |
| Информационные системы | 2 |
| Системное программное обеспечение | 3 |
Справочная целостность соблюдается здесь, так как все преподаватели в таблице course (курсы) существуют в таблице lecturer (преподаватели). Однако предположим, что Anne Cohen ушла из учебного заведения, и вы удалили её из таблицы преподавателей. В ситуации, когда справочная целостность не поддерживается, она будет удалена из таблицы преподавателей, но не из таблицы курсов, как показано ниже:
Таблица преподавателей
| Код | Имя | Фамилия |
|---|---|---|
| 2 | Leonard | Clark |
| 3 | Vusi | Cave |
Таблица курсов
| Название курса | Код преподавателя |
|---|---|
| Введение в программирование | 1 |
| Информационные системы | 2 |
| Системное программное обеспечение | 3 |
Теперь, когда вы ищете преподавателя курса «Введение в программирование», вы получите ссылку на несуществующую запись. Это называется плохой целостностью данных.
Внешние ключи также позволяют выполнять каскадные удаления и обновления. Например, если Anne Cohen уходит, забрав с собой курс «Введение в программирование», все следы её можно удалить из таблиц lecturer и course одной операцией. Удаление каскадируется по соответствующим таблицам, удаляя все соответствующие записи.
Внешние ключи также могут содержать значения NULL, что указывает на отсутствие связи.
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/relational-databases-foreign-keys/