【问题标题】:Can you use username as unique identifier/primary key您可以使用用户名作为唯一标识符/主键吗
【发布时间】:2014-05-04 00:03:05
【问题描述】:

关于以下案例的最佳实践的简单问题。

使用帐户开发网站。网站已设置为没有两个帐户可以拥有相同的用户名,即所有用户名都是唯一的。

在数据库中持久化帐户时,是否可以将用户名用作主键(唯一标识符),或者是否有一些我应该知道的原因需要单独生成的唯一 ID?

【问题讨论】:

    标签: sql database web


    【解决方案1】:

    不要使用用户名作为主键,从不

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

    1. 它们更快更小(密钥为 4-8 个字节,用户名最多 你不知道个字节?)
    2. 只是现在您认为用户名将是唯一的,稍后您会发现您需要非唯一的用户名(例如对于您必须保存交易历史记录的已删除用户),否则要求会改变
    3. 用户应该能够更改他们的用户名,以防出现错误/错别字/等

    更新:如果是分布式系统,请使用 GUID

    【讨论】:

    • 谢谢 - 您对生成唯一 ID 有何建议?递增值、用户名+当前时间等值的加盐哈希?
    • @SaadAttieh 通常递增绝对够用
    • 就个人而言,如果username 用于登录(因此应该是唯一的),我会将历史记录存储在另一个表中,这样我就可以获得唯一键约束的安全性.如果不是,如果它是某种标签,那么没关系。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多