中国开发网: 论坛: 程序员情感CBD: 贴子 362171
sealw: 自然主键(surrogate key)和替代主键(natural key)
摘自《重构数据库》

许多数据库专家偏爱自然键。在数据社区中,自然键和替代键之争是一个“宗教信仰问题”,但实际情况是二者都有各自的位置。虽然一个表拥有一个替代主键,但是您也许仍然需要其他的自然键来支持查找。您的最终用户不能使用替代键来查找。因此,他们还需通过自然标识符来标识数据。例如,InventoryItem表有一替代主键InventoryItemPOID(POID是持久对象标识符的缩写),以及另一个自然键IventoryID。每一个对象在系统内都由替代键唯一地标识,但用户通过自然键来标识它。使用替代键的价值在于它简化了数据库的键策略,减少了数据库schema与业务领域之间的耦合。

另一个问题是,您有可能在不需要时候使用了替代键。许多人会变得过于热衷实现键,常常试图在schema的各处采用相同的策略。例如在美国,每个州都由一个2个字母的代码唯一地标识(比如加州是CA)。这个州代码在美国和加拿大的范围内是保证唯一的,Ontario省的代码是ON,没有一个美国的州会使用这一代码。州和省是相当稳定的实体,还有大量的代码可以使用(目前只用到了676种可能中的65种),并且由于可能在各自系统内导致动荡,两国政府不太可能改变这一策略。所以,在一个列出所有州和省的查找表中引入替代键是否有意义呢?可能没有。

同样,如果原来的键在其他表中被用作外键,您需要采用“统一键策略”,并对这些表进行相应的更新。请注意,工作量可能超过所带来的价值,您在进行这类重构时可能需要三思后行。

相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录