标准答案
- 自然键在稳定、短小、标准化且确实不会变化的字典类数据中可以使用,例如 ISO 国家代码。
- 代理键与业务规则解耦,业务名称、编码、合并拆分或脱敏变化时不会牵动所有外键。
- 手机号、邮箱、用户名、订单展示号等往往会变更、复用、受隐私限制或生成规则升级,不适合作为主键。
- 业务唯一性仍应通过 UNIQUE 约束表达,代理键不能代替对重复数据的控制。
- 关联表优先引用稳定的内部标识,外部接口再按需要暴露安全的业务标识或公开 ID。
题目解析
主键不仅是“能唯一定位一行”,还是其他表长期引用的身份。任何可能被修正、换绑、脱敏或重新编码的字段,一旦承担主键,就会让级联更新和历史关联变得昂贵且危险。
自然键并非绝对不能用。真正的关键判断是它是否由外部标准保证稳定、是否足够紧凑、是否没有敏感性,以及业务是否会要求同一实体在不同生命周期拥有不同值。
常见误区
- 认为有自增 ID 就不需要业务唯一约束,最后出现多条相同的注册或订单记录。
- 把可修改的用户名当外键,改名操作演变成跨表大范围更新。