Назад к вопросам
Junior
68
questionbank

В чем заключается идея внешнего ключа?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Внешний ключ (Foreign Key) — это столбец (или набор столбцов) в одной таблице, который ссылается на первичный ключ (или уникальный ключ) в другой таблице. Он устанавливает связь между двумя таблицами, обеспечивая ссылочную целостность данных.

Идея заключается в следующем:

  1. Связывание таблиц: Позволяет связать строки из одной таблицы с соответствующими строками в другой таблице на основе общего значения.
  2. Поддержание целостности: Гарантирует, что ссылка во внешней таблице указывает на существующую строку в родительской таблице (таблице, на которую ссылается внешний ключ). Например, нельзя удалить пользователя, на которого ссылаются записи заказов, без предварительного удаления или обновления этих заказов.
  3. Ограничение операций: Определяет, что происходит с данными во вторичной таблице при изменении или удалении данных в родительской таблице. Возможны следующие действия (constraints):
    • ON DELETE CASCADE: Автоматическое удаление зависимых строк во вторичной таблице.
    • ON UPDATE CASCADE: Автоматическое обновление зависимых строк во вторичной таблице.
    • ON DELETE SET NULL: Установка значения внешней ключа в NULL при удалении родительской строки (если столбец допускает NULL).
    • ON UPDATE SET NULL: Установка значения внешней ключа в NULL при обновлении родительской строки.
    • ON DELETE RESTRICT: Предотвращение удаления родительской строки, если на нее ссылаются зависимые строки.
    • ON UPDATE RESTRICT: Предотвращение обновления родительской строки.
    • NO ACTION (по умолчанию в некоторых СУБД): Схоже с RESTRICT, но проверка откладывается до конца транзакции.
  4. Моделирование отношений: Позволяет моделировать различные типы отношений между сущностями в базе данных, например, "один-ко-многим" или "многие-ко-многим" (через промежуточную таблицу).

Пример создания внешнего ключа в SQL:

CREATE TABLE Orders (
    order_id INT PRIMARY KEY,
    customer_id INT,
    order_date DATE,
    FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
);

CREATE TABLE Customers (
    customer_id INT PRIMARY KEY,
    customer_name VARCHAR(255)
);