PostgreSQL | Зачем нужны внешние ключи?

PostgreSQL | Зачем нужны внешние ключи?

Когда ты только начинаешь изучать PostgreSQL, не всегда понятен смысл тех или иных операторов, определений и выражений.

Одним из таких не очевидных понятий является «ВНЕШНИЙ КЛЮЧ» или «FOREIGN KEY«.

Я приведу несколько примеров зачем он нужен.

 

Зачем № 2 — Каскадное удаление данных

Если ваши таблицы не будут связаны, то вам придётся ВРУЧНУЮ контролировать удаление оригинальных данных и все ссылки на них, а также все последующие вытекающие ссылки. Чем сложнее будет ваша система, чем больше в ней будет связанных таблиц, тем труднее вам будет НЕ ПОТЕРЯТЬ цепочку связей.

При РУЧНОМ подходе к задаче «удаления» (без связывания первичным и внешним ключами) вы гарантированно начнёте получать «дырки» в данных. Анализ таких данных превратится в полный бред. Смысла в таких данных не будет. По голове вас никто не погладит. Вы и сами запутаетесь во всём.

СУБД PostgreSQL даёт удобный инструмент по каскадному удалению данных.

Всё что от вас требуется — это правильно расставить ключи (внешние и первичные) в таблицах и необходимое поведение при удалении (или  обновлении) записей в этих таблицах. PostgreSQL сама будет выполнять за вас последовательное каскадное удаление оригинальных данных во всех остальных источниках. Ваша голова освобождается от написания ненужного когда под функционал, который уже эффективно работает.

 

Зачем № 1 — Связывание таблиц

Таблицы связываются между собой при помощи «ПЕРВИЧНЫХ КЛЮЧЕЙ» и «ВНЕШНИХ КЛЮЧЕЙ«.

Простой пример связей:

КЛИЕНТ <==> ЗАКАЗ <==> ТОВАР

Между клиентом и товаром нет прямой очевидной связи! Но есть косвенная связь через посредника — через таблицу ЗАКАЗ.

 

Информационные ссылки

Официальный сайт WEB-оболочки pgAdminhttps://www.pgadmin.org

Официальный сайт СУБД PostgreSQLhttps://www.postgresql.org

Раздел «Ограничения» — https://postgrespro.ru/docs/postgresql/14/ddl-constraints