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);
Связанные термины
Анекдоты по теме
NoSQL-разработчик стучится в дом к SQL-разработчику. — У тебя схемы нет? — Нет, зато у тебя каждый документ — сам себе сеньор.
— Почему timestamp without time zone опасен? — Хранит время без информации о часовом поясе. — Проблема? — Сервер в UTC, приложение в Moscow, пользователь в Vladivostok. База хранит 10:00 — но это 10:00 где? — Решение? — TIMESTAMPTZ (timestamp with time zone). Хранит UTC, отображает в нужной зоне.
Пользователь: — Почему мой запрос ничего не вернул? DBA: — А ты проверил регистр? Пользователь: — Да. DBA: — А пробелы? Пользователь: — Да. DBA: — А кодировку? Пользователь: — О господи...