用户名或用户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字段。