Получить доступ

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

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

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

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

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

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

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

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

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

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

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

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

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

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

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

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

Разбор темы

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

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем