当主键被认为是自然键并且被认为是代理键时?

时间:2016-11-19 16:40:00

标签: database database-design relational-database

我试图了解主键何时被认为是自然键以及何时被认为是代理键。我已经读过代理键和自然键具有以下属性:

  

自然键是由已存在的属性组成的键   在现实世界中。

     

代理键在数据库环境之外没有任何意义。

说我有下表(employee_id是主键):

enter image description here

现在让我们说employee_id在现实世界中是众所周知的,例如:每位员工都有一张身上印有employee_id的身份证,这是否意味着employee_id是一把自然的钥匙?

现在让我们考虑另一个场景,其中employee_id在现实世界中是未知的(它在数据库环境之外没有意义),并且使用他们的SSN在现实世界中识别员工,这是否意味着employee_id是替代密钥?

1 个答案:

答案 0 :(得分:2)

您的摘要是正确的。所有键都是他们识别的东西的“代理人”。与数据库管理相关的唯一有用区别是关键属性是存在还是打算在业务域中使用 (AKA是话语域)。如果在业务域中使用密钥,则将其称为自然密钥(或者称为业务密钥或域密钥)。否则它被称为代理键。

然而,这些术语在某种程度上是非正式的,不同的人会以微妙的方式使用它们。

E.F.Codd在他的RM / T论文中使用了更为严格的代理人定义。他提出了一个在数据库表中甚至看不到的“密钥”的想法。他的提议有一些严重的问题,并没有像他描述的那样广泛实施。它主要是历史兴趣。

Codd定义中仍然相关的一个方面是代理通常不应该是可见的 - 至少不是对业务领域数据的用户。在业务域中公开密钥值实际上使密钥成为域密钥而不是代理。因此,代理密钥不能履行域密钥的作用或不需要域密钥。