2010-01-27 49 views

回答

8

如果您不想获取重复的用户名,请创建一个UNIQUE constraint

如果DWong1145想要更改它的用户名呢?你会使所有的数据库关系为UPDATE CASCADE

+0

我的问题是在一个认证系统的背景下,不会允许用户名更改。我应该提到这一点。 – 2010-01-27 09:03:10

+1

@Emanuil - 引用侏罗纪公园的Jeff Goldblum的话说,“人生找到一条路。”如果您有一天需要更改用户名,现在您可能会后悔此刻...... – 2010-01-27 09:23:19

+0

“'信息'不能用作密钥;'数据'可能”; '数据'不需要改变,就像程序一定要理解一样。如果我打电话给SO并要求更改我的用户_id_会怎么样?我不能这样做,但我可以更改我的用户_名称。 – 2010-01-27 09:30:39

4

从客户的角度来看,你打赌。我不希望我的用户名是DWong1145。

7

,您应该使用用户名只作为唯一键/常量。用户名可以更改,只是举例而已:它可能是商标,所有者请求您放弃它。

+0

听起来有点简洁;)你*是*权利虽然。我讨厌你不能更改你的用户名的系统 - 但是,OP在评论中说他不希望它被改变,所以... – 2010-01-27 15:12:52

5

这是一个很好的候选人,但是你必须考虑你是否真的想要这样做。例如,您有一个具有某个用户名的用户,则用户将被“删除”(或标记为已删除)。因此,实际上没有理由不允许使用相同的用户名创建另一个用户,但由于它是主键,因此它已被“取用”。

2

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

+0

它不一定要慢。好的数据库引擎可以预先散列任何字符串值。最重要的是,使用自然键可能会消除对应用程序中的许多连接的需求,从而加快查询速度。我承认,自然钥匙通常会消耗更多的空间,但诚实地说,空间便宜而丰富。 – 2010-07-28 08:40:55