Внешний ключ (FOREIGN KEY) в SQL

  Юрий  | 

  |

  Обновл. 18 Мар 2023  | 

 3829

Внешний ключ (FOREIGN KEY) нужен для того, чтобы связать две разные таблицы между собой. Внешний ключ может ссылаться на любой столбец в родительской таблице. Однако общепринятой практикой является ссылка внешнего ключа на первичный ключ (primary key) родительской таблицы. Например:

Здесь поле customer_id в таблице Orders является FOREIGN KEY, который ссылается на поле id в таблице Customers. Это означает, что значением customer_id (таблицы Orders) должно быть значение из столбца id (таблицы Customers).

Создание внешнего ключа

Теперь давайте посмотрим, как мы можем добавить ограничение FOREIGN KEY:

Здесь столбец customer_id таблицы Orders ссылается на столбец id таблицы Customers.

Примечание: Вышеприведенный код создания внешнего ключа может отличаться в некоторых СУБД.

Вставка данных в таблицу с внешним ключом


Попробуем вставить данные в таблицу с внешним ключом.

Зачем использовать внешний ключ?

Две главные причины:

   Нормализация данных. FOREIGN KEY помогает нормализовать данные в нескольких таблицах и уменьшить избыточность. Это означает, что в базе данных может быть несколько таблиц, связанных друг с другом.

   Предотвращение вставки некорректных данных. Если две таблицы в базе данных связаны через поле (атрибут), использование FOREIGN KEY гарантирует, что в это поле не будут вставлены неверные данные. Это помогает устранить ошибки на уровне базы данных.

FOREIGN KEY с оператором ALTER TABLE


Можно добавить ограничение FOREIGN KEY к существующей таблице с помощью оператора ALTER TABLE. Например:

Несколько внешних ключей в таблице

Таблица может иметь несколько внешних ключей. Предположим, нам нужно записать все транзакции, где каждый пользователь одновременно является покупателем и продавцом.

Здесь мы создаем два внешних ключа (buyer и seller) в таблице Transactions.


Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (3 оценок, среднее: 4,67 из 5)
Загрузка...

Добавить комментарий

Ваш E-mail не будет опубликован. Обязательные поля помечены *