繁体   English   中英

什么时候将主键视为自然键,什么时候将其视为代理键?

[英]When a primary key is considered to be a natural key and when it is considered to be a surrogate key?

我试图理解何时将主键视为自然键,何时将其视为代理键。 我已经读过代理键和自然键具有以下属性:

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

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

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

在此处输入图片说明

现在,让我们说出employee_id在现实世界中是众所周知的,例如:每个员工都有一张印有employee_id的ID卡,这是否意味着employee_id是自然键?

现在让我们考虑另一种情况,其中employee_id在现实世界中未知(在数据库环境之外没有任何意义),并且使用SSN在现实世界中标识了雇员,这是否意味着employee_id是代理密钥?

您的总结是正确的。 所有键都是它们所标识的事物的“替代”。 与数据库管理有关的唯一有用的区别是,关键属性是否存在或是否打算在业务领域 (即话语领域)中使用。 如果在业务域中使用了密钥,则称为自然密钥(也称为业务密钥或域密钥)。 否则,它称为代理密钥。

这些术语在某种程度上是非正式的,并且确实被不同的人以不同的方式使用。

EFCodd在其RM / T论文中使用了更严格的替代定义。 他提出了在数据库表中甚至看不到的“键”的想法。 他的建议存在一些严重的问题,并且没有以他所描述的方式广泛实施。 它只具有历史意义。

Codd定义中仍然有意义的一个方面是,代理通常通常不可见-至少对于业务域中的数据用户而言不可见。 实际上,在业务域中公开键值会使该键成为域键,而不是替代键。 随之而来的是,代理密钥不能满足域密钥的作用,也不会消除对域密钥的需求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM