我想知道构建和存储 ID 的最佳实践是什么。几年前,一位教授以社会安全号码为例,向我讲述了构建不良的 ID 系统的危险。特别是,因为 SSN 没有任何错误检测功能……无法区分 9 位字符串和有效 SSN。现在政府机构需要诸如姓氏 + SSN 或生日 + SSN 之类的东西来跟踪您的数据并确保其验证。另外,根据您的出生地,您的社会安全号码在某种程度上是可以预测的。
现在我正在构建一个用户数据库......根据这个建议,“userid mediumint auto_increment”是不可接受的。特别是如果我打算将此 ID 用作用户的主要标识。(例如,如果我允许用户更改他们的用户名,那么用户名将比数字用户 ID 更难跟踪......需要级联外键等等。)电子邮件更改,用户名可以更改,密码更改.. . 但是用户标识应该永远保持不变。
显然,auto_increment 只为 surrogate_keys 设计。也就是说,仅当您已经拥有主要标识机制时,它才是有用的快捷方式,但不应将其用作数据的“固有标识符”。创建随机 UUID 看起来很有趣,但随机性让我很反感。
所以我问:创建“主键”标识号的最佳实践是什么?