Gymterview
junior

Что такое внешний ключ?

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

Аналогия из жизни: внешний ключ — это как номер паспорта в договоре. Сам паспорт (запись) хранится в таблице «Люди», а в договоре указан только номер для ссылки на конкретного человека.

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

  • Обеспечение ссылочной целостности (referential integrity) — нельзя сослаться на несуществующую запись
  • Определение связей между таблицами (один-к-одному, один-ко-многим)
  • Каскадное обновление и удаление связанных данных

Пример

Пример
CREATE TABLE orders (
    id BIGINT PRIMARY KEY,
    user_id BIGINT NOT NULL,
    amount DECIMAL(10,2),
    FOREIGN KEY (user_id) REFERENCES users(id)
        ON DELETE CASCADE
        ON UPDATE CASCADE
);

Действия при удалении/обновлении родительской записи

Стратегия Поведение
CASCADE Удалить/обновить все дочерние записи
SET NULL Установить FK в NULL
SET DEFAULT Установить FK в значение по умолчанию
RESTRICT Запретить удаление/обновление, если есть дочерние записи
NO ACTION Аналогично RESTRICT, но проверка отложена до конца транзакции

На собеседовании: интервьюер хочет услышать, что внешний ключ обеспечивает ссылочную целостность на уровне СУБД. Частая ошибка — считать, что FK автоматически создаёт индекс (в PostgreSQL — нет, нужно создавать вручную).