Как выбрать первичный ключ в реляционной базе данных, когда несколько столбцов уникальны?

Если в таблице есть два столбца, которые выступают в качестве составного ключа-кандидата (уникально идентифицируя каждую строку), является ли хорошей практикой создание суррогатного ключа и использование его вместо этого в качестве первичного ключа?

Причина будет в том, что ссылаться на внешние ключи будет проще (ссылка на один столбец вместо двух).

Кроме того, если используется суррогатный ключ, должен ли я создать уникальное ограничение для двух ранее упомянутых столбцов?

1 ответ

Решение

Вы фактически задали несколько вопросов:

  1. Если есть несколько столбцов (или наборов столбцов), которые являются уникальными с логической точки зрения, я должен сделать ключ для всех из них?
  2. Когда есть несколько ключей, как мне решить, какой из них сделать основным?
  3. Если уже есть естественный ключ (или ключи), могу ли я заменить его (их) на суррогатный ключ?
  4. Если уже есть естественный ключ (или ключи), должен ли я добавить суррогатный ключ?

И вот ответы:

  1. Да.
  2. С логической точки зрения все ключи эквивалентны. Однако могут быть физические соображения в пользу того, чтобы сделать одно из них первичным по сравнению с другими.
  3. Нет.
  4. Это зависит. Подробнее об этом здесь.
Другие вопросы по тегам