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