我见过很多关于使用userid或username作为表的主键的讨论。如果需要,userid将允许稍后更改用户名的灵活性。也是实现安全性的一种方式。但是,用户名也是唯一标识符。
如果我选择userid作为我的主键,那么强制username采用唯一值的最佳方法是什么?
如果我选择用户名,我应该注意什么问题?
发布于 2013-04-20 13:15:20
我会将UserId声明为PRIMARY KEY,因为将有其他表通过UserId引用此用户记录,因此对强制执行任何FOREIGN KEY约束都很有用。
如果用户名需要是唯一的,那么我将把它声明为NON NULL列,并定义UNIQUE KEY约束。NON NULL属性将防止列中的UNIQUE KEY约束所允许的单个空值。因此,在UserName上的这种设置类似于PRIMARY KEY的设置。
发布于 2013-04-20 13:16:01
这是我自己的观点。
我宁愿选择数据类型为int (也可以是UserID )的字符串作为表的主键,因为在任何时候这都不能更改。而且由于它是不可更改的,所以在引用它的一些外键上没有问题。
我之所以没有选择Username,是因为在某些时候,虽然这是独一无二的,但有时是可以改变的。如果已经存在引用该用户名外键,则在首先删除或删除这些键或记录之前,根本不能更改用户名。
发布于 2013-04-20 13:15:45
至少在我听来,从语义上讲,userid听起来像是人工创建的值,可能是一个人工主键,而username听起来像是一个自然的、用户友好的(自然主键的组件)。在相反的意义上使用这两个术语都可能偶尔会让程序员和用户感到困惑,并可能在以后产生一些微妙的bug。
https://stackoverflow.com/questions/16116820
复制相似问题