# Первичный ключ, внешний ключ, отношения.

**Первичный ключ** — это поле или совокупность полей таблицы, которое однозначно идентифицирует каждую строку. Значение первичного ключа не должно повторяться и, как правило, не может быть `NULL`. Именно первичный ключ позволяет надежно ссылаться на конкретную запись.

**Внешний ключ** — это поле или группа полей в одной таблице, которое ссылается на первичный ключ другой таблицы. Внешние ключи используются для обеспечения ссылочной целостности данных и описывают связи между таблицами.

### Отношения между таблицами

В реляционных системах управления базами данных (РСУБД) таблицы связываются между собой с помощью первичных (PK) и внешних (FK) ключей. Тип связи определяет, сколько записей одной таблицы может соответствовать записям другой.

#### Связь «один ко многим»

Одна запись в родительской таблице может быть связана с множеством записей в дочерней таблице.

**Пример.**
Одна область (*Area*) может содержать множество блоков (*BlastBlocks*). В таблице `BlastBlock` присутствует колонка `AreaId`, которая является внешним ключом и ссылается на первичный ключ таблицы областей.

#### Связь «один к одному»

Каждая запись в одной таблице связана ровно с одной записью в другой таблице.

**Пример.**
Один сотрудник связан с одним служебным пропуском. В одной из таблиц внешний ключ имеет ограничение уникальности и ссылается на первичный ключ другой таблицы.

#### Связь «многие ко многим»

Одна запись в таблице может быть связана со множеством записей в другой таблице, и наоборот.

Такую связь невозможно реализовать напрямую, поэтому используется промежуточная таблица. Она содержит два внешних ключа — по одному на каждую из связанных таблиц.

**Пример.**
Студент может посещать множество курсов, и на один курс могут быть записаны многие студенты. Промежуточная таблица хранит пары идентификаторов студентов и курсов.