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 — нет, нужно создавать вручную).