Primary Key и Foreign Key

Базовый SQL
≈ 1 мин чтения

Primary Key однозначно определяет строку

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

CREATE TABLE users (
    id INTEGER PRIMARY KEY,
    name VARCHAR(100)
);

Теперь строку пользователя можно однозначно адресовать по id, даже если несколько пользователей имеют одинаковое имя.

Foreign Key связывает таблицы

Foreign Key хранит ссылку на ключ строки другой таблицы и позволяет базе контролировать существование такой связи.

CREATE TABLE orders (
    id INTEGER PRIMARY KEY,
    user_id INTEGER,
    FOREIGN KEY (user_id) REFERENCES users(id)
);

Здесь orders.user_id ссылается на users.id. Так схема явно выражает правило: заказ относится к пользователю, существующему в таблице users.

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