用户名是否适合作为主键?

7

我知道通常建议使用代理主键而不是自然主键,但是在用户名方面,有没有支持代理主键的论点呢?

5个回答

8
如果您不想获得重复的用户名,请创建一个唯一约束
如果DWong1145想要更改它的用户名,那么您需要使所有数据库关系都是UPDATE CASCADE吗?

我的问题是关于一个不允许更改用户名的身份验证系统。我应该提到这一点。 - Emanuil Rusev
1
@Emanuil - 引用《侏罗纪公园》中杰夫·高布伦的话,“生命总会找到出路。”如果有一天你需要更改用户名,你可能会后悔现在没有考虑清楚… - Dan Beam
“信息”不应该被用作键;而“数据”可以。因为“数据”一直都是被程序理解的,所以不需要做出改变。如果我打电话给SO请求更改我的用户_id呢?这是不可能的,但我可以更改我的用户名。 - Rubens Farias

7
不,你应该将用户名仅作为唯一键/常量使用。用户名可以更改,只是一个例子:它可能是商标,所有者要求您放弃它。

听起来有点简洁;) 不过你是对的。我讨厌那些不能更改用户名的系统 - 但是,OP在评论中说他不想更改,所以... - Nick Bolton

5

从客户的角度来看,是的。我不想让我的用户名是DWong1145。


5

从某种意义上来说,这是一个不错的选择,但您必须考虑是否真的想这样做。例如,您有一个使用特定用户名的用户,然后该用户被“删除”(或标记为已删除)。因此,实际上没有任何理由不允许创建另一个具有相同用户名的用户,但是它已经被“占用”,因为它是主键。


2

使用字符串作为主键的一个很大的缺点,无论它是一个用户名还是其他什么,就是所有引用该表的外键列也必须是字符串,这既慢又浪费更多的空间。


它不必慢。好的数据库引擎可以对任何字符串值进行预哈希处理。此外,使用自然键可能会消除应用程序中许多连接的需求,从而使查询更快。我承认自然键通常会占用更多的空间,但老实说,空间是便宜且充足的。 - lubos hasko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接