Вопрос с собеседования · Базы данных

Почему в качестве первичного ключа обычно предпочитают суррогатный ключ, а не естественный?

MiddleМоделирование данныхSQL
Ещё спрашивают так:
  • Почему не использовать email как первичный ключ?
Коротко

Бизнес-значения меняются (email, телефон, номер паспорта), а идентичность записи меняться не должна. Суррогатный ключ (bigint identity, UUIDv7) разделяет эти вещи.

  • Смена естественного ключа — каскадное обновление всех ссылок
  • Естественный ключ может быть длинным, составным и не всегда известен
  • Бизнес-уникальность — отдельным UNIQUE

А ещё Естественный ключ уместен для неизменных кодов: ISO-код валюты, страны

Подробно

Классические примеры: email и телефон пользователь меняет, номер документа переоформляют, а страна может сменить код. Каждое такое изменение при естественном ключе означает каскадное обновление всех внешних ключей. Суррогатный ключ лишён смысла и потому стабилен. Важная оговорка: он не отменяет уникальность бизнес-данных — на email всё равно нужен уникальный индекс, иначе появятся дубли. При выборе типа стоит помнить о компромиссе: последовательное целое компактно и дружелюбно к индексу, случайный UUID удобен для генерации на стороне клиента и слияния данных, но ухудшает локальность вставки в B-tree; частично это лечат упорядоченными по времени вариантами UUID.

Что хотят услышать

  • Почему естественные ключи нестабильны.
  • Суррогатный ключ плюс UNIQUE на бизнес-поля.
  • Когда естественный ключ допустим.

Частые ошибки

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

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗СУБД не поддерживают текстовые первичные ключи
  • ✗Суррогатный ключ сам гарантирует уникальность бизнес-данных
  • ✓Естественные атрибуты меняются, а смена PK тянет обновление всех ссылок
  • ✗Естественные ключи занимают больше места в любом случае

Что спросят дальше

  • Чем плох случайный UUID как кластерный ключ?
  • Когда естественный ключ всё-таки уместен?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

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

Разбор собеседования