Dra*_*788 7 sql language-agnostic identity auto-increment surrogate-key
我想知道构建和存储ID的最佳实践是什么.几年前,一位教授告诉我一个身份不良的身份证制度的危险,以社会保障号码为例.特别是,因为SSN没有任何错误检测......不可能分辨出9位数字符串和有效SSN之间的区别.现在,政府机构需要使用Last Name + SSN或Birthday + SSN等内容来跟踪您的数据并确保其验证.此外,根据您出生的地点,您的社会安全号码可以预测.
现在我正在构建一个用户数据库......并且基于这个建议"userid mediumint auto_increment"将是不可接受的.特别是如果我打算使用此ID作为用户的主要标识.(例如,如果我允许用户更改其用户名,那么用户名将比数字用户ID更难以跟踪...需要级联外键等等.)电子邮件更改,用户名可以更改,密码更改..但是用户ID应该永远保持不变.
显然,auto_increment仅适用于surrogate_keys.也就是说,只有当您已经拥有主要识别机制时,它才是有用的快捷方式,但它不应该用作数据的"先天标识符".创建随机UUID看起来很有趣,但随机性让我失望.
所以我问:创建"主键"识别号码的最佳做法是什么?
您将内部数据库功能与外部搜索条件混淆.
自动增量代理键对于内部应用程序使用很有用.永远不要将那些传递给用户.识别业务对象(无论是用户还是发票)都是使用有关对象的唯一信息(如SSN,CCN或DOB)完成的.根据需要使用尽可能多的信息来唯一标识对象.
我强烈建议,如果您必须向每个客户提供一些新发明的ID值,那么它不是您链接所有客户数据表的字段.