2013-02-07 69 views
3

主鍵也是超級鍵和候選鍵嗎?他們的定義很長,但我想知道這是否屬實?主鍵也是超級鍵和候選鍵嗎?

請注意,我不問他們是否是相同的任期。我只是問一個方向,而不是相反方向。

+0

是的主鍵是候選鍵,因此也是一個超級鍵。 – sqlvogel

回答

0

能夠識別數據庫中的任何行的不同屬性集稱爲超級密鑰。並且最小超級密鑰被稱爲候選密鑰,即在具有最小數量的屬性的超級密鑰集合之中。主鍵可以是能夠以唯一方式識別數據庫中的特定行的任何鍵。 from this thread

和打字在谷歌所有的三個按鍵爲您提供有關2,480,000 results

0

這要看情況。

主鍵是表格用來識別不同元素的主鍵。它是從候選鍵中選擇的。

候選鍵是可能成爲主鍵的所有鍵。所有的鑰匙都是獨一無二的,並且可以在桌子上加以區分。

超級密鑰是具有附加屬性的主鍵,這些額外信息用於唯一標識實體組的實例。

7
  • 超級中心 - 是一套可用於在表中唯一標識記錄的一個或多個列的

  • 候選鍵 - 可以是任何列或組合可以作爲數據庫中唯一密鑰的列。在一個表中可以有多個候選鍵。每個候選鍵都可以被認定爲主鍵。你可以認爲這是「最短」超級鍵或最小超級鍵

  • 主鍵 - 是一列或唯一標識記錄列的組合。只有一個候選鍵可以是主鍵。

對於候選鍵有資格作爲主鍵,它應該是唯一的和非空的。

所以,基本上主鍵只是其中一個候選鍵,它只是一個最小的超級鍵。

2

根據乾的定義:

你的主鍵是超級關鍵定義 - 你不能有相同的主鍵的兩行。
但是,主鍵不是您的業務的約束,而是數據存儲中的一個人爲約束:例如,您可以將某人的生日設置爲表中的主鍵,並且永遠不會有兩個出生的人在同一天。這將是愚蠢的,但可能的。在這種情況下,該表的主鍵不是該域的超級鍵

但是,您的主鍵不一定是候選鍵 - 您可以將冗餘列添加到主鍵。

+0

+1好點,但最後一句話是不正確的。根據定義,主鍵必須是最小的(即候選鍵)。也許你的意思是,SQL中的PRIMARY KEY約束可能被定義在非最小的一組列上。那是真實的。但是,這隻能證明SQL語法是不恰當的,因爲定義的列可能根本不是主鍵。 SQL語法的奇怪之處肯定與實際問題沒有關係,這只是關於主鍵(即候選鍵總是最小的超級鍵)。 – sqlvogel

0

候選鍵是唯一標識元組的字段的最小子集。例如,如果在「user_id」和「pet_id」列上有候選鍵,則不會有超過1個具有相同user_id和pet_id的元組,並且user_id和pet_id都不會作爲元組的唯一標識符。

超級密鑰是一組包含密鑰的字段。使用上面的例子,如果我們添加「pet_name」(這不是關鍵,因爲我們可以有多個名爲「蓬鬆」的寵物),「user_id」和「pet_id」的組合唯一標識了一個元組,這將是一個超級關鍵。基本上它就像一個沒有「最小子字段」約束的候選鍵。

主鍵是您告訴數據庫優化的候選鍵。可能有多種引用唯一元組的方法(即多個候選鍵),但是當您創建將使用最頻繁的表時,您可以指定一個。