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.