你可以使用用户名作为唯一标识符/主键吗?

6

关于下面的问题,我有一个快速提问。

正在开发一个带有账户的网站。网站设置为不允许两个账户具有相同的用户名,即所有的用户名都是唯一的。

在将账户持久化到数据库中时,是否可以使用用户名作为主键(唯一标识符),还是需要生成一个单独的唯一id,有什么需要注意的原因吗?

1个回答

11

不要将用户名作为主键,绝不要

请使用代理键(即自动生成的数字),因为:

  1. 它们更快且更小(键为4-8个字节,而用户名长达 你不知道 字节?)
  2. 只有 现在 您才认为用户名是唯一的,以后您会发现需要非唯一的用户名(例如对于已删除用户,您必须保存交易历史记录),或者需求会改变
  3. 用户应该能够更改他们的用户名,以防错误/打字等

更新:在分布式系统的情况下,请使用GUID。


谢谢 - 你会建议使用什么方法来生成唯一的ID?递增值、加盐哈希值(例如用户名+当前时间)等? - Saad Attieh
1
@SaadAttieh 常规的增量完全足够 - Iłya Bursov
个人而言,如果username用于登录(因此应该是唯一的),我会将历史记录存储在另一个表中,这样我就可以获得唯一键约束的安全性。如果不是,如果它是某种标签,那么就无所谓了。 - Clockwork-Muse

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