业务主键

在关系型数据库设计中，业务主键是一个由以及真实存在于世界中的属性构成的键。举例来说，一个美国公民的社会安全号码可以被用作一个业务主键。在其他的表达方式中，一个业务主键是和行内属性具有逻辑关系的候选键。

业务主键对于逻辑主键的主要优势在于（逻辑主键在脱离数据库环境时没有任何意义）业务主键已经存在，因此没有必要去添加新的人工的列到定义中。使用业务主键（当存在一个可以被识别的业务主键时）也会简化数据的质量：业务主键确保了对于每个只会存在唯一一条对应的行；“真相只有一个版本”这点是可以被验证的，因为业务主键是基于对真实世界的观察结果。

选择业务主键的主要不足在于业务主键的值可能会发生改变，并且关系型数据库引擎可能不能够通过关联的外键来扩散这种改变。举例来说，如果 person_name 被用作 person 表的主键。然后一个 person 记录的 name 由于结婚而发生了改变（在传统西方国家，女性婚后会改为丈夫的姓），然后所有的一对多的关联表都因此需要更新。次级的不足在于选择业务主键是在识别主键。主键必须包含可以唯一识别某一行的属性。然而，在一张表上创建一个业务主键可能是困难的或者会导致更多的约束。举例来说，如果 person_name 被用作 person 表的主键，许多 person 可能会使用相同的名字，因此除了第一条记录以外的数据都会因为重复性被拒绝添加到表中。唯一性约束可以通过添加额外的列（比如 street_address）到主键中以提高唯一性来克服。

外部链接
 .
 .
 .

数据建模