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);
Связанные термины
Анекдоты по теме
— Что такое вторая нормальная форма? — Нет частичной зависимости от составного ключа. — Пример нарушения? — Таблица orders(order_id, product_id, product_name). product_name зависит только от product_id, не от всего ключа. — Как исправить? — Вынести product_name в таблицу products.
— Как хранить деньги в базе данных? — DECIMAL(19,4) или NUMERIC(19,4). — Почему не FLOAT? — Потому что FLOAT неточный. 0.1 + 0.2 = 0.30000000000000004. — В банке это было бы проблемой. — Именно.
— Какая оконная функция самая печальная? — LAG(). Потому что она всегда оглядывается на прошлое и никогда не смотрит вперёд.