知识卡片

自然键与代理键的取舍

专业/工作 · 521.c

内容

一本书天然就有 ISBN 这种业务上本来就唯一的”自然键”,按理可以直接拿来当数据库主键,但更常见的做法是引入一个和业务毫无关系的技术主键(代理键,通常是自增数字),ISBN 则退化成一个带唯一约束的普通业务字段。这样做的好处是把”数据库怎么标识一行记录”和”业务上怎么标识一个书”这两件事解耦——业务规则变化(比如某天允许同一本书有多个 ISBN 版本共存)不会牵连到数据库主键设计,主键本身也更适合用作外键关联,不携带任何会变化的业务语义。发散:这是[[仓储抽象隔离领域与持久化]]同一条原则在字段粒度上的体现——凡是让”持久化实现细节”渗透进”业务概念”的设计,都会在业务规则变化时制造不必要的连锁修改,代理键就是为了在最细的粒度上也守住这条边界。

参考来源

《Cloud Native Spring in Action》第5章《Persisting and managing data in the cloud》