用户名或用户ID
我见过很多讨论是否最好使用用户名或用户名作为表的主键。如果需要,userid将允许以后更改用户名的灵活性。也是实现安全性的一种方式。但是,用户名也是唯一标识符。用户名或用户ID
如果让我选择的userid我的主键,什么是强制用户名采取了独特价值的最佳方式是什么?
如果让我选择的用户名,有什么问题我应该知道的?
我将宣布UserId
作为PRIMARY KEY
一样会有其它表通过UserId
参照该用户记录,从而将强制执行任何FOREIGN KEY
约束是有用的。
如果用户名需要唯一,那么我将声明它为NON NULL
列并定义UNIQUE KEY
约束。 NON NULL
属性将防止列中的UNIQUE KEY
约束允许的单个空值。因此,在UserName上设置的值与PRIMARY KEY
的值相似。
在语义上,我的耳朵至少,的userid听起来像人工创造的值,可能是人工的主键,而用户名听起来自然的,用户友好(的分量)的自然主键。使用相反意义上的术语可能会偶尔混淆程序员和用户,并有可能在后面创建微妙的错误。
这是从我自己的角度来看。
我宁愿选择数据类型为int的UserID
(或可能是串)是表的主键,因为在任何时候,这不能改变。由于它是不可更改的,所以引用它的某些外键没有问题。
为什么我没有选择Username
是因为在某些时候,虽然这是独一无二的,可有时会改变的原因。如果已经有外键引用它,那么该用户名根本无法更改,直到这些键或记录首先被删除或删除。
什么是执行用户名采取了独特价值的最佳方式是什么?
创建唯一索引。
如果让我选择的用户名,有什么问题我应该知道的?
您是否允许用户随时更改他们的用户名(只要它保持唯一)?如果是,则使用您生成的用户标识;否则使用他们选择的用户名。
对于第一个问题,UNIQUE
约束在大多数现代RDBMS中都可用。您也可以在应用程序级别实现它。
对于第二个问题,我没有看到任何明显的问题。用户名通常为最终用户所知。但是,如果您拥有大量用户并且用户名字段的最大长度很大,那么索引的效率可能不如int类型的用户ID字段。