DDL / СхемаНачальный
FOREIGN KEY
Ограничение, связывающее колонку с первичным ключом другой таблицы. Обеспечивает ссылочную целостность.
Синтаксис
REFERENCES parent_table(parent_col) [ON DELETE CASCADE|SET NULL|RESTRICT]
Объяснение
FOREIGN KEY гарантирует: в колонке могут быть только значения, существующие в родительской таблице.
При DELETE/UPDATE родительской строки: ON DELETE CASCADE (удалить дочерние), ON DELETE SET NULL, ON DELETE RESTRICT (запретить, по умолчанию).
Всегда добавляй индекс на колонку FK — иначе поиск и JOIN медленные.
Пример
CREATE TABLE orders ( id BIGINT PRIMARY KEY, user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE, product_id BIGINT REFERENCES products(id) ON DELETE RESTRICT ); -- Индекс на FK обязателен! CREATE INDEX ON orders (user_id);
Связанные термины
Анекдоты по теме
— Чем коррелированный подзапрос отличается от обычного? — Обычный выполняется один раз. Коррелированный — для каждой строки внешнего запроса. — Это плохо? — Зависит от размера таблицы. При миллионе строк — миллион подзапросов.
— Что такое UNLOGGED TABLE? — Таблица без WAL (Write-Ahead Log). — Быстрее обычной? — В 5–10 раз на INSERT. — В чём подвох? — При сбое данные теряются. Не реплицируется. — Когда использовать? — Кэш, временные данные, staging для ETL.
— Как называется программист, который сделал UPDATE без WHERE в production? — Бывший программист.