【发布时间】:2016-11-19 16:39:59
【问题描述】:
我试图了解何时将主键视为自然键以及何时将其视为代理键。我读过代理键和自然键具有以下属性:
自然键是由已经存在的属性组成的键 在现实世界中。
代理键在数据库环境之外没有意义。
假设我有下表(employee_id 是主键):
现在假设employee_id在现实世界中是已知的,例如:每个员工都有一张身份证,上面印有employee_id,这是否意味着employee_id是一个自然密钥?
现在让我们考虑另一种情况,employee_id 在现实世界中是未知的(它在数据库环境之外没有任何意义),而员工在现实世界中使用他们的SSN 来识别,这是否意味着employee_id 是代理键?
【问题讨论】:
-
您引用的“自然键”定义很常见,但许多人会使用没有“已经”的定义;那么即使外部可见的 id 在数据库中是新的,它们仍然是自然的。使用您的“已经”定义的人可能会使用与您给出的不同的“代理”定义,将其定义为“新的”而不是“内部的”,并且会称新员工 ID 不是自然的而是替代的。
标签: database database-design relational-database