Gymterview
junior

Что такое первичный ключ и каковы критерии его выбора?

Первичный ключ (primary key) — один из потенциальных ключей отношения, выбранный в качестве основного идентификатора записей.

Критерии выбора первичного ключа

Критерий Пояснение
Минимальный размер Меньше физического хранения — быстрее индексы и JOIN
Минимальное количество атрибутов Простой ключ предпочтительнее составного
Стабильность во времени Значение не должно меняться (иначе каскадно обновятся FK)
Гарантия уникальности Уникальность не должна утрачиваться со временем

Естественный vs суррогатный ключ

Характеристика Естественный ключ Суррогатный ключ
Источник Бизнес-данные (ИНН, email) Генерируется системой (AUTO_INCREMENT, UUID)
Читаемость Имеет бизнес-смысл Не несёт смысла
Стабильность Может измениться (email) Не меняется
Размер Может быть большим Обычно компактный (BIGINT)

На практике в большинстве случаев используется суррогатный ключ (BIGINT с автоинкрементом или UUID), потому что он компактен, стабилен и не зависит от бизнес-логики.

Пример
CREATE TABLE users (
    id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    email VARCHAR(255) UNIQUE NOT NULL,  -- альтернативный ключ
    name VARCHAR(100) NOT NULL
);

На собеседовании: интервьюер часто спрашивает «почему не использовать email как PK?». Ответ: email может измениться, он длинный (увеличивает размер индексов и FK), и его сравнение медленнее, чем сравнение BIGINT. Хороший кандидат упомянет компромисс UUID vs BIGINT.