Spec-Zone.ru › MariaDB

Базы данных реляционного типа: Внешние ключи

Вы уже знаете, что связь между двумя таблицами создается путём назначения общего поля в обе таблицы (см. Базы данных реляционного типа: Ключи таблиц). Это общее поле должно быть первичным ключом одной из таблиц. Рассмотрим связь между таблицей customer (клиент) и таблицей sale (продажа). Связь не очень полезна, если вместо использования первичного ключа customer_code в таблице sale используется другое поле, которое не является уникальным, например, имя клиента. В этом случае будет сложно точно определить, какой клиент совершил покупку. Таким образом, в таблице ниже customer_code называется foreign_key (внешним ключом) в таблице sale; другими словами, это первичный ключ во внешней таблице.

setting_foreign_keys

Внешние ключи позволяют реализовать так называемую справочную целостность. Это означает, что если внешний ключ содержит значение, это значение ссылается на существующую запись в связанной таблице. Например, рассмотрите таблицы ниже:

Таблица преподавателей

Код Имя Фамилия
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, что указывает на отсутствие связи.

Содержимое, воспроизведённое на этом сайте, является собственностью соответствующих владельцев, и это содержание не проходит предварительной проверки со стороны MariaDB. Мнения, информация и мнения, выраженные в этом содержимом, не обязательно отражают точку зрения MariaDB или любой другой стороны.

© 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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API