Когда следует использовать FOREIGN KEY в базе данных?

«Когда следует использовать FOREIGN KEY в базе данных?» — вопрос из категории Базы данных, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

FOREIGN KEY (внешний ключ) используется для обеспечения ссылочной целостности данных между таблицами в реляционной БД. Он гарантирует, что значение в столбце (или группе столбцов) одной таблицы соответствует значению первичного ключа (PRIMARY KEY) или уникального ключа (UNIQUE) в связанной таблице.

Основные сценарии применения:

  1. Реализация связей между таблицами:

    • Один-ко-многим (1:N): Самый частый случай. Например, у одного Customer может быть много Orders.
      
      CREATE TABLE Customers (
      CustomerID INT PRIMARY KEY,
      Name VARCHAR(100) NOT NULL
      );

    CREATE TABLE Orders ( OrderID INT PRIMARY KEY, CustomerID INT NOT NULL, OrderDate DATE, CONSTRAINT FK_Orders_Customers FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID) ON DELETE CASCADE -- Действие при удалении клиента );

  2. Предотвращение "осиротевших" записей: БД не позволит вставить в Orders запись с несуществующим CustomerID или удалить клиента, у которого есть заказы (если не задано CASCADE).

  3. Определение каскадных действий (ON DELETE / ON UPDATE):

    • CASCADE: Удалить/обновить связанные записи автоматически.
    • SET NULL / SET DEFAULT: Установить в столбце NULL или значение по умолчанию.
    • RESTRICT / NO ACTION: Запретить операцию, нарушающую целостность (стандартное поведение).
  4. Повышение производительности запросов: Внешний ключ часто автоматически индексируется, что ускоряет JOIN-операции между связанными таблицами.