Как выбрать первичный ключ в реляционной базе данных, когда несколько столбцов уникальны?
Если в таблице есть два столбца, которые выступают в качестве составного ключа-кандидата (уникально идентифицируя каждую строку), является ли хорошей практикой создание суррогатного ключа и использование его вместо этого в качестве первичного ключа?
Причина будет в том, что ссылаться на внешние ключи будет проще (ссылка на один столбец вместо двух).
Кроме того, если используется суррогатный ключ, должен ли я создать уникальное ограничение для двух ранее упомянутых столбцов?
1 ответ
Решение
Вы фактически задали несколько вопросов:
- Если есть несколько столбцов (или наборов столбцов), которые являются уникальными с логической точки зрения, я должен сделать ключ для всех из них?
- Когда есть несколько ключей, как мне решить, какой из них сделать основным?
- Если уже есть естественный ключ (или ключи), могу ли я заменить его (их) на суррогатный ключ?
- Если уже есть естественный ключ (или ключи), должен ли я добавить суррогатный ключ?
И вот ответы:
- Да.
- С логической точки зрения все ключи эквивалентны. Однако могут быть физические соображения в пользу того, чтобы сделать одно из них первичным по сравнению с другими.
- Нет.
- Это зависит. Подробнее об этом здесь.