2010-02-01 66 views

回答

1

從邏輯上講,是的。如果表X有列{A, B, C}A是主鍵,然後{A}{A, B}{A, C}{A, B, C}都superkeys,因爲如果你有這些集合中的任何一個,你知道的行中的所有值(如果存在的話。)

然而,在某些用途中,它不被當作SQL中的一個關鍵字,例如,如果表YAB你可以通過而不是通常定義一個外鍵Y(A, B) REFERENCES X(A, B),因爲{A, B}不是主鍵。如果您希望能夠聲明該外鍵,則您必須在X(A, B)上添加另一個UNIQUE約束,因爲它複製了主鍵的一部分,所以效率低下。

在我看來,這是SQL的許多缺陷之一。

+0

'A'是結果一致的唯一原因,並且包含'B'和/或'C'(或其組合)因爲'A'是主鍵沒有額外的好處。因此,'A'是唯一的「超級鍵」。 – 2010-02-01 21:51:33

+0

你所描述的是*候選鍵*。 'A'是唯一的候選關鍵。 「ABC」,「AB」,「BC」是超級鍵,但不是候選鍵。 – finnw 2010-02-02 06:40:38

0

superkey可以包含非唯一標識符或主鍵。但是像複合主鍵一樣,組合必須是唯一的。 規範化數據集具有表格,用於保存與數據庫目的相關的特定實體的相關數據。因此,例如,具有員工數據庫的公司具有員工表並且可能具有另一個員工行動歷史表(促銷,評論,薪金調整等)

如果密鑰唯一地具有資格選擇表中的特定行,以便該表中的數據完全取決於該鍵,而不需要其他數據。

假設員工表是基於美國的。它可能有兩個候選人 - 一個可能是一個員工編號,另一個可能是員工的社會安全號碼。如果一家公司要求員工擁有SSN ......,這可能會發生。

好吧,兩名候選人 - 員工號碼和SSN。

您必須選擇一個作爲主鍵,在這種情況下,另一個成爲僅取決於鍵的選擇的另一個數據字段。

在美國,根據兩個因素,員工數量可能會被選爲PK,將SSN留在次要領域。首先,使用SSN存在法律限制,因爲它是促進身份盜用的個人識別信息。其次,一個人可能申請了SSN,但尚未獲得。所以SSN不能被依賴,從而使其作爲候選人無效。

因此,主鍵和候選鍵之間的差別在於其他候選者失去了競賽。

SUPERKEY本質上是一個超定鍵,一個保證是唯一的選擇器 - 但它不是最小的。在我的員工表格示例中,(員工編號,SSN)的組合將是一個超級鍵。請注意,superkey通常會包含主鍵。

還有更多。這個定義提到了一個與整個記錄相同的基數作爲關鍵字的超級鍵。 (最終的關鍵,完全不切實際,因爲你必須事先知道整個記錄才能將它用作關鍵...)

「基數」只是說,當我查詢單個鍵值的表時,什麼是平均返回記錄數。對於正確的主鍵,對於表中存在的所有值,這總是且僅爲1。 (顯然,表中不存在的數字爲零。)基數將大於非唯一鍵的基數。對於另一個頻譜的另一個例子是一個大小爲N的表格,使用「Gender」作爲關鍵字會給你一個N/2的基數。記住,因爲它是AVERAGE返回大小,所以表格的分佈不一定是完美的。

希望有所幫助。

相關問題