我想知道构建和存储ID的最佳做法是什么。几年前,一位教授以社会保险号为例,向我讲述了身份证明系统构造不佳的危险。特别是,由于SSN没有错误检测功能,因此无法分辨9位数字的字符串和有效的SSN之间的区别。现在,政府机构需要“姓氏+SSN”或“生日+SSN”之类的信息来跟踪您的数据并确保对其进行验证。另外,根据您的出生地,您的社会保险号是可以预测的。
现在,我正在建立一个用户数据库…,根据此建议,“ userid mediumint auto_increment”将是不可接受的。特别是如果我打算将此ID用作用户的主要标识。(例如,如果我允许用户更改其用户名,则与数字用户名相比,要跟踪用户名会更加困难……需要级联外键等。)电子邮件更改,用户名可以更改,密码也要更改。 。,但用户名应永远保持不变。
显然,auto_increment仅设计用于surrogate_keys。也就是说,仅当您已经具有主要标识机制时,它才是有用的快捷方式,但不应将其用作数据的“固有标识符”。创建随机UUID看起来很有趣,但是随机性使我无法接受。
所以我问:创建“主键”标识号的最佳实践是什么?
您正在将内部数据库功能与外部搜索条件混淆。
自动增量代理键对于内部应用程序使用很有用。切勿将其传递给用户。识别业务对象(无论是用户还是发票)都是使用有关对象的唯一信息(例如SSN,CCN或DOB)完成的。使用尽可能多的信息来唯一标识对象。
我强烈建议,如果必须为每个客户提供一些新发明的ID值,则不要在该字段上链接所有客户数据表。