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);Связанные термины
Анекдоты по теме
— Чем JSONB отличается от JSON в PostgreSQL? — JSON хранит текст как есть. JSONB парсит и хранит бинарно. — Что быстрее? — JSONB быстрее читать и индексировать. JSON быстрее записывать и сохраняет порядок ключей. — Что выбрать? — Почти всегда JSONB.
— Чем коррелированный подзапрос отличается от обычного? — Обычный выполняется один раз. Коррелированный — для каждой строки внешнего запроса. — Это плохо? — Зависит от размера таблицы. При миллионе строк — миллион подзапросов.
— Почему запрос SELECT * FROM users чувствует себя неуверенно? — Потому что он не знает, кого именно из себя изображать. Всех и сразу — это непрофессионально.