(я бы поставил это в комментарии, но это слишком долго.)
Первичные ключи в теории не должны быть неизменными; однако в реальном мире наличие изменяемых первичных ключей является кошмаром по двум причинам:
- По мере роста реляционной модели каждая дочерняя таблица должна включать каждый столбец первичного ключа родителя.
- Первичные ключи, как и все уникальные ограничения, применяются индексами.
- В некоторых СУБД просто не может быть достаточно столбцов в индексе, чтобы удовлетворить такие конструкции естественных ключей.
- Аналогичным образом существуют требования к длине данных для ключей индекса.
- Наконец, изменяемые первичные ключи должны каскадироваться по всей системе.
Короче говоря:
Если ваши значения ключа могут когда-либо измениться
- номер кредитной карты или номер счета является плохим первичным ключом, потому что он может измениться, а имя - действительно плохой выбор
или
у вас есть какие-либо данные, зависящие от этой таблицы, через внешние ключи (это довольно легко изменить при возникновении требования)
тогда
Создайте суррогатный ключ в качестве первичного ключа. Здорово, что вы нашли естественный ключ таблицы; на эти столбцы накладывается уникальное ограничение.