用户名或用户名

时间:2013-04-20 05:10:49

标签: sql primary-key

我看过很多讨论是否更好地使用userid或username作为表的主键。如果需要,userid将允许以后更改用户名的灵活性。也是一种实现安全性的方法。但是,用户名也是唯一标识符。

如果我选择userid作为我的主键,那么强制使用用户名来获取唯一值的最佳方法是什么?

如果我选择用户名,我应该注意哪些问题?

5 个答案:

答案 0 :(得分:2)

我会将UserId声明为PRIMARY KEY,因为会有其他表通过UserId引用此用户记录,从而有助于强制执行任何FOREIGN KEY约束。< / p>

如果用户名必须是唯一的,那么我会将其声明为NON NULL列并定义UNIQUE KEY约束。 NON NULL属性将阻止列中UNIQUE KEY约束所允许的单个空值。因此,UserName上的设置与PRIMARY KEY的设置类似。

答案 1 :(得分:2)

这是我自己的观点。

我宁愿选择{{1>}数据类型int(或者可能是字符串)作为表的主键,因为在任何时候都无法更改。一些引用它的外键没有问题,因为它是不可更改的。

我没有选择UserID的原因是因为在某些时候,虽然这是独一无二的,但有时可能会有所改变。如果已经存在引用它的外键,则在用户首先删除或删除那些键或记录之前,该用户名根本不能更改。

答案 2 :(得分:0)

从语义上讲,至少在我耳边, userid 听起来像是人为创造的价值,可能是人工主键,而用户名听起来像是自然的,用户友好的(组件)一个自然的主键。使用相反意义上的任何一个术语可能会偶尔混淆程序员和用户,并可能在未来产生微妙的错误。

答案 3 :(得分:0)

  

强制使用用户名来获取唯一值的最佳方法是什么?

创建唯一索引。

  

如果我选择用户名,我应该注意哪些问题?

您是否允许用户随时更改其用户名(只要它保持唯一)?如果是,则使用您生成的用户标识;否则使用他们选择的用户名。

答案 4 :(得分:0)

对于您的第一个问题,大多数现代RDBMS都提供UNIQUE约束。您也可以在应用程序级别实现它。

对于你的第二个问题,我没有看到任何明显的问题。 UserNames通常为最终用户所知。但是,如果您有大量用户且用户名字段的最大长度很大,则索引可能不如int类型userID字段有效。