В каких случаях следует использовать натуральный (естественный) первичный ключ в базе данных?

«В каких случаях следует использовать натуральный (естественный) первичный ключ в базе данных?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Натуральный ключ — это атрибут или набор атрибутов, которые уникально идентифицируют запись и имеют бизнес-значение (ISBN книги, номер паспорта, email).

Используйте натуральный ключ, когда:

  • Существует стабильный, неизменяемый и гарантированно уникальный бизнес-идентификатор. Например, код страны по стандарту ISO (US, RU).
  • Ключ простой и атомарный (не составной из многих полей).
  • Требуется естественная уникальность для данных. Это упрощает понимание схемы и запросов.
    -- Запрос с натуральным ключом интуитивно понятен
    SELECT * FROM countries WHERE country_code = 'DE';
  • Избегаете лишних JOIN. Если ключ является значимым полем, его можно использовать в связанных таблицах без подтягивания описания.

Пример схемы:

CREATE TABLE books (
    isbn VARCHAR(13) PRIMARY KEY, -- Натуральный ключ
    title VARCHAR(255),
    author VARCHAR(255)
);

Риски натурального ключа:

  • Изменение значения. Если пользователь меняет email, придётся каскадно обновлять все внешние ключи.
  • Сложность. Составные ключи (регион + номер) ухудшают производительность JOIN.
  • Неэффективность. Длинные строковые ключи занимают больше места в индексах и во внешних ключах, чем компактные целочисленные surrogate-ключи.