2013-04-20 7 views
1

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

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

Если я выбираю имя пользователя, какие проблемы следует знать?

ответ

2

Я хотел бы объявить UserId как PRIMARY KEY как будут другие таблицами цитирования данного пользователя записи через UserId и, таким образом, будет полезно для обеспечения каких-либо ограничений FOREIGN KEY.

Если имя пользователя должно быть уникальным, я бы объявлял его как столбец NON NULL и определял ограничение UNIQUE KEY. Свойство NON NULL будет препятствовать единственному нулевому значению, разрешенному ограничением UNIQUE KEY в столбце. Таким образом, эта настройка для UserName будет аналогична настройке PRIMARY KEY.

0

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

2

Это с моей точки зрения.

Я достаточно выбрать UserID типа данных Int (или может быть строка), чтобы быть первичным ключом таблицы, так как во все времена это не может быть изменен. И нет никаких проблем с некоторыми внешними ключами, которые ссылаются на него, поскольку он неизменен.

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

0

Каков наилучший способ принудительного использования имени пользователя для получения уникального значения?

Создайте уникальный индекс.

Если я выбираю имя пользователя, какие проблемы следует знать?

Вы позволите пользователю изменить свое имя пользователя (если оно остается уникальным), когда захочет? Если да, то используйте идентификатор пользователя, который вы создаете; в противном случае используйте имя пользователя, которое они выбирают.

0

Для вашего первого вопроса ограничение UNIQUE доступно на большинстве современных СУБД. Вы можете реализовать его и на уровне приложений.

Для вашего второго вопроса я не вижу никаких очевидных проблем. UserNames обычно известны конечным пользователям. Однако, если у вас большой набор пользователей и максимальная длина поля имени пользователя велика, индексирование может быть не таким эффективным, как в полях userID.

Смежные вопросы