业务主键
由真實世界中的屬性構成的鍵
在关系型数据库设计中,业务主键是一个由以及真实存在于世界中的属性构成的键。举例来说,一个美国公民的社会安全号码可以被用作一个业务主键。在其他的表达方式中,一个业务主键是和行内属性具有逻辑关系的候选键。
业务主键对于逻辑主键的主要优势在于(逻辑主键在脱离数据库环境时没有任何意义)业务主键已经存在,因此没有必要去添加新的人工的列到定义中。使用业务主键(当存在一个可以被识别的业务主键时)也会简化数据的质量:业务主键确保了对于每个只会存在唯一一条对应的行;“真相只有一个版本”这点是可以被验证的,因为业务主键是基于对真实世界的观察结果。
选择业务主键的主要不足在于业务主键的值可能会发生改变,并且关系型数据库引擎可能不能够通过关联的外键来扩散这种改变。举例来说,如果 person_name 被用作 person 表的主键。然后一个 person 记录的 name 由于结婚而发生了改变(在传统西方国家,女性婚后会改为丈夫的姓),然后所有的一对多的关联表都因此需要更新。次级的不足在于选择业务主键是在识别主键。主键必须包含可以唯一识别某一行的属性。然而,在一张表上创建一个业务主键可能是困难的或者会导致更多的约束。举例来说,如果 person_name 被用作 person 表的主键,许多 person 可能会使用相同的名字,因此除了第一条记录以外的数据都会因为重复性被拒绝添加到表中。唯一性约束可以通过添加额外的列(比如 street_address)到主键中以提高唯一性来克服。