Разве плохо использовать имя пользователя в качестве первичного ключа при проектировании базы данных? - PullRequest
19 голосов
/ 01 декабря 2009

Мне сказал друг:

Какой уникальный ключ вы используете? Я надеюсь ты не сохраняют все имя пользователя --- это займет слишком много табличного пространства! Назначьте уникальный идентификатор пользователя каждому (уникальный) userNAME и сохраните этот userID (должны быть целыми без подписи auto_increment или BIGINT UNSIGNED автоматическое приращение). Не забудь создать ссылку

ИНОСТРАННЫЙ КЛЮЧ (userID) ССЫЛКИ usertable (userID) во всех таблицах используя идентификатор пользователя.

Правильно ли приведенное выше утверждение? Почему или почему нет?

Ответы [ 2 ]

47 голосов
/ 01 декабря 2009

Я думаю, что он прав (по неправильной причине), потому что первичный ключ не может измениться, но username может измениться. Поэтому вы должны использовать userid, потому что это не изменится.

18 голосов
/ 01 декабря 2009

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

...