Являются ли имена пользователей допустимым кандидатом на первичный ключ? - PullRequest
7 голосов
/ 27 января 2010

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

Ответы [ 5 ]

8 голосов
/ 27 января 2010

Если вы не хотите получать повторяющиеся имена пользователей, создайте UNIQUE constraint.

Что если DWong1145 захочет изменить свое имя пользователя? Сделаете ли вы, чтобы все отношения с базой данных были UPDATE CASCADE?

7 голосов
/ 27 января 2010

НЕТ , вы должны использовать имя пользователя только в качестве уникального ключа / константы . Имя пользователя может быть изменено, просто и пример: это может быть товарный знак, и владелец просит вас удалить его.

5 голосов
/ 27 января 2010

Это хороший кандидат в некотором смысле, однако вы должны подумать, действительно ли вы хотите это сделать. Например, у вас есть пользователь с определенным именем пользователя, затем пользователь «удаляется» (или помечается как удаленный). Таким образом, на самом деле нет причин не разрешать создавать другого пользователя с тем же именем пользователя, но он уже «занят», поскольку это первичный ключ.

4 голосов
/ 27 января 2010

Вы делаете ставку с точки зрения клиента. Я не хочу, чтобы мое имя пользователя было DWong1145.

2 голосов
/ 27 января 2010

Большим недостатком наличия строки в качестве первичного ключа, независимо от того, является ли это имя пользователя или что-то еще, является то, что все столбцы внешнего ключа, ссылающиеся на таблицу, также должны быть строками, что одновременно медленнее и занимает больше места.

...