2016-11-19 27 views
1

我想知道什麼時候主鍵被認爲是一個自然鍵,什麼時候它被認爲是代理鍵。我已閱讀,代理鍵和自然鍵具有以下屬性:當主鍵被認爲是一個自然鍵,並且當它被認爲是代理鍵?

自然鍵是已經在現實世界中存在 屬性形成的關鍵。

代理鍵在數據庫環境之外沒有意義。

說我有如下表(employee_id是主鍵):

enter image description here

現在,讓我們說,employee_id是在現實世界中已知的,例如:每個員工都有一個ID卡其上印有employee_id,這是否意味着employee_id是一個天然的關鍵?

現在讓我們考慮另一種情況,其中employee_id沒有在現實世界中已知的(它在數據庫環境之外沒有任何意義),以及員工使用他們SSN在現實世界中確定,這是否意味着employee_id是代理鍵?

+0

您引用的「自然鑰匙」的定義是comon,但許多人會使用沒有「已經」的定義;那麼即使外部可見IDs是數據庫的新增功能,它們仍然很自然。使用你的「已經」定義的人可能會使用與你給出的不同的「代理人」定義爲「新」而不是「內部」,並且會將新員工ID稱爲非自然但代理人。 – philipxy

回答

2

您的摘要是正確的。所有的鑰匙都是他們所識別事物的「代用品」。與數據庫管理相關的唯一有用的區別在於,關鍵屬性是否存在或打算在商業領域(也就是話語領域)中使用。如果在業務域中使用密鑰,那麼它被稱爲自然密鑰(或稱爲業務密鑰或域密鑰)。否則它被稱爲代理鍵。

然而,這些術語在某種程度上是非正式的,不同的人會以不同的方式使用這些術語。

E.F.Codd在他的RM/T論文中使用了對代理的更嚴格的定義。他提出了一個在數據庫表中甚至不可見的「密鑰」的想法。他的提案存在一些嚴重問題,並沒有按照他所描述的方式廣泛實施。它僅僅是歷史利益。

Codd的定義仍然相關的一個方面是代理人應該通常不可見的想法 - 至少不是業務領域數據的用戶。公開業務領域中的關鍵值實際上使關鍵字成爲域密鑰而不是代理。由此可見,代理鍵不能履行域密鑰的作用或不需要域密鑰。

相關問題