Какие атрибуты вам доступны? Какие из них волнует ваше приложение? Например, два человека не могут родиться в одну и ту же секунду в одном и том же месте, но вы, вероятно, не имеете доступа к этим данным с таким уровнем точности! Таким образом, из атрибутов, которые вы намереваетесь моделировать, вам нужно решить, какие из них достаточны для обеспечения приемлемого уровня целостности данных. Что бы вы ни выбрали, вы правы, сосредоточившись на аспектах целостности данных (предотвращая вставку нескольких строк для одного и того же человека) по вашему выбору.
Для соединений / внешних ключей в других таблицах лучше использовать суррогатный ключ.
Я вырос, чтобы рассмотреть использование слова Первичный ключ как неправильное или, в лучшем случае, запутанное. Любой ключ, независимо от того, помечен ли он как Первичный ключ , Альтернативный ключ , Уникальный ключ или Уникальный индекс , по-прежнему является ключом, и требует, чтобы каждая строка в таблице содержала уникальные значения для атрибутов в ключе. В этом смысле все ключи эквивалентны. Важнее всего (больше всего), являются ли они естественными ключами (в зависимости от значимых атрибутов данных модели реального домена) или суррогатами (независимыми от атрибутов реальных данных)
Во-вторых, важно также то, для чего вы используете ключ. Суррогатные ключи узки и просты и никогда не меняются (Нет причин - они ничего не значат). Поэтому они являются лучшим выбором для соединений или для внешних ключей. в других зависимых таблицах.
Но для обеспечения целостности данных и предотвращения вставки нескольких строк для одной и той же сущности домена они абсолютно бесполезны ... Для этого вам нужен какой-то естественный ключ , выбранный из имеющихся у вас данных доступны, и которые ваше приложение для какой-то цели моделирует.
Ключ не должен быть на 100% неизменным. Если (в качестве примера) вы используете имя, номер телефона и дату рождения, например, даже если человек меняет свое имя или номер телефона, вы можете просто изменить значение в таблице. Пока ни у одной другой строки нет новых значений в их ключевых атрибутах, у вас все в порядке.
Даже если выбранный вами ключ работает только в 99,9% случаев (скажем, вам не повезло столкнуться с двумя людьми с одинаковым именем и номером телефона, которые случайно родились в один и тот же день), по крайней мере, 99,9 % ваших данных будет гарантированно точным и непротиворечивым - и вы можете, например, просто добавить время к их дате рождения, чтобы сделать их уникальными, или добавить какой-то другой атрибут к ключу, чтобы различать их. Если вам не нужно обновлять значения данных в внешних ключах по всей базе данных из-за этого изменения (поскольку вы не используете этот ключ в качестве FK в другом месте), вы не столкнетесь с какой-либо существенной проблемой.