Первичные и внешние ключи в базе данных | Зачем они нужны и как они работают?

161 прочитал
Понятие первичного и внешнего ключей актуальны только для реляционных баз данных, где все данные организованы в форме таблиц, связанных между собой.

Понятие первичного и внешнего ключей актуальны только для реляционных баз данных, где все данные организованы в форме таблиц, связанных между собой.

Само слово ключ в контексте БД подразумевает поле (столбец таблицы) ИЛИ набор полей. Что же это за особые столбцы, и почему их называют ключами?

Первичный ключ (Primary key) -

это поле, или список полей, с помощью которого можно однозначно идентифицировать одну строчку. Выделение ПК необходимо, чтобы иметь возможность найти нужную строчку, корректно делать соединения таблиц и агрегацию. Есть пара главный свойств:

  • ПК имеет место только в рамках одной таблицы. И у каждой таблицы он свой.
  • Все значения столбца, выбранного в качестве ПК - уникальны. Не должно быть повторяющихся.

Посмотрим на пример: таблица заказов. Как отличить 1 заказ от другого?

Понятие первичного и внешнего ключей актуальны только для реляционных баз данных, где все данные организованы в форме таблиц, связанных между собой.-2

Для этой цели и нужен первичный ключ. В нашем кейсе эту роль выполняет поле "Номер заказа". В данной таблице представлены все уникальные заказы. Каждый из них имеет свой идентификатор и они НЕ повторяются.

Так как одним из условий организации данных в реляционной БД является исключение избыточности, с помощью ПК мы можем агрегировать записи (строчки) с одинаковым ключом, а также ссылаться на какой то заказ в других таблицах!

Но! Бывают ситуации, когда одного поля для однозначной идентификации уникальной строчки недостаточно. В этом случае в первичный ключ могут входить несколько ключевых полей. Такой первичный ключ называется составным.

Посмотрим на таблицу из примера выше, но теперь представим, что в ней нет столбца с Номером заказа. Как тогда однозначно определить 1 уникальную строчку?

Понятие первичного и внешнего ключей актуальны только для реляционных баз данных, где все данные организованы в форме таблиц, связанных между собой.-3

Используем составной ПК, состоящий из трех полей: Имя, Магазин, Дата покупки. При этом уникальной и не повторяющейся должна быть уже комбинация полей. Именно по такому принципу они выбираются. Заметим, что поле с адресом может не входить в ключ. Так как каждому магазину соответствует 1 единственный адрес, номера магазина в ключе будет достаточно.

Внешний ключ (Foreign key) -

это так же поле, или комбинация полей, который ссылается на первичный ключ другой таблицы. Поэтому он и внешний, так как принадлежит другой сущности С помощью внешнего ключа (ВК) можно подтянуть поля одной таблицы в другую. Таким образом устанавливается связь между соответствующими записями двух таблиц.

Посмотрим на таблицу с товарами, входящими в каждый заказ в таблице выше:

Понятие первичного и внешнего ключей актуальны только для реляционных баз данных, где все данные организованы в форме таблиц, связанных между собой.-4

В данном случае "Номер заказа" является Внешним ключом. С помощью этого ВК можно подтянуть сюда данные из таблицы с заказами и подробного посмотреть, в какой заказ какие товары входили.

А вот первичным ключом этой таблицы будет комбинация полей: Товар и Цвет.

В ERD-диаграмме нашей импровизированной базы данных все, что мы описывали выше. будет выглядеть так:

Понятие первичного и внешнего ключей актуальны только для реляционных баз данных, где все данные организованы в форме таблиц, связанных между собой.-5

В этой статье мы рассмотрели, основные особенности ключей и то, как они работают. Однако не менее важно понимать, как их применять на практике при конструировании БД или написании SQL запросов к ней. Это мы подробнее рассмотрим в следующей статье, где напишем реальные запросы, разберем, какие манипуляции можно совершать с помощью ключей, и какой синтаксис использовать!