1

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

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

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

4

5 回答 5

2

我将声明UserId为,PRIMARY KEY因为将有其他表引用此用户记录UserId,因此将有助于强制执行任何FOREIGN KEY约束。

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

于 2013-04-20T05:15:19.690 回答
2

这是我个人的观点。

我宁愿选择UserID数据类型 int (或者可以是 string)作为表的主键,因为这在任何时候都不能改变。由于它是不可更改的,因此引用它的一些外键没有问题。

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

于 2013-04-20T05:16:00.650 回答
0

在语义上,至少在我的耳朵里,userid听起来像是一个人为创建的值,可能是一个人工主键,而username听起来像是一个自然的、用户友好的(组成)自然主键。在相反的意义上使用这两个术语可能偶尔会混淆程序员和用户,并且可能会在未来产生微妙的错误。

于 2013-04-20T05:15:44.737 回答
0

强制用户名具有唯一值的最佳方法是什么?

创建唯一索引。

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

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

于 2013-04-20T05:16:01.180 回答
0

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

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

于 2013-04-20T05:17:13.303 回答