重疊候選鍵到底是什麼?
有人可以簡單地向我解釋一下什麼是
overlapping candidate key
?overlapping
顧名思義是什麼?考慮以下關係
R(L,M,N,O,P) { M -> O NO -> P P -> L L -> MN }
上述哪個函式依賴在上述關係中引入了重疊的候選鍵?
讓我們將討論限制在依賴項上,我目前對 BCNF 不感興趣
使用可能的候選鍵 vikkyhacks,您的錢是對的。重疊候選鍵是具有至少一個共同屬性的複合(由多個屬性組成)候選鍵。因此,您的重疊候選鍵是 NM 和 NO(它們共享 N)。
上面的附加解釋,最初留在評論中:
所有重疊的候選鍵都是一組(例如兩個或更多)候選鍵。這意味著第一個標準是您的關係
R
必須具有多個候選鍵(最小超級鍵)。對於要重疊的任何候選鍵,它們中的每一個(同樣是兩個或更多)都必須滿足一些附加條件。1)它們都必須是複合候選鍵。它們必須包含多個屬性,因此一個類似的鍵A
永遠不會重疊,但AB
可能與另一個鍵重疊。2) 組合鍵必須共享一個屬性。與and但不AB
重疊or 。AC``BD``CD``EF
總結一下:兩組或更多組屬性,其中 1)每組是關係的候選鍵(最小超鍵),2)每組是複合鍵(由多個屬性組成),以及 3)一個或多個複合鍵的屬性與集合中另一個鍵的屬性重疊。因此,您可以排除它們,
MNOP
並NOPL
基於它們不是最小的超級鍵。您可以排除P
並L
基於它們不是複合鍵(它們由一個屬性組成)。你剩下兩個鍵,NO
和NM
,它們共享屬性N
,所以你完成了。例子
舉一個你可以真正理解的例子也可能會有所幫助。我見過的唯一一次你將有重疊的候選鍵是當你有 1)兩個在功能上確定彼此的屬性(例如,在 where has one
A
和has one之間的一對一關係)和 2)這些屬性是複合候選鍵的一部分。B``A``B``B``A
例如,在某些系統中, a
Customer
有一個CreditCard
,而 aCreditCard
屬於一個Customer
。在 Rentals 表中,您可以通過 和Rental
來EquipmentId
唯一標識 a 。為方便起見,您也已儲存在此表上。Date``CustomerId``CreditCard
這意味著以下 FD 成立:
{CustomerId, EquipmentId, Date} -> {CreditCard} {CustomerId} -> {CreditCard}
但由於關聯是一對一的,因此以下 FD 也成立:
{CreditCard} -> {CustomerId} {CreditCard, EquipmentId, Date} -> {CustomerId}
因為
CustomerId
和CreditCard
可以互換使用,以唯一地辨識您的客戶。在上面的場景中,您有重疊的候選鍵:
{CreditCard, EquipmentId, Date} {CustomerId, EquipmentId, Date}
它們是重疊的,因為它們是複合鍵(它們由多個屬性組成)並且因為它們至少有一個屬性是共享的(在這種情況下,它們共享
EquipmentId
和Date
。你說你現在不在乎
BCNF
,但是為了完全把這個帶回家,上面的場景是你偶爾會看到一張在3NF
裡面但不在的桌子的原因BCNF
。上表在3NF
,但不是BCNF
。
3NF
允許 FD,其中 1) FD 是平凡的 2) FD 的左側是候選鍵或 3) FD 的右側是鍵屬性(用於製作任何鍵的屬性)。由於CreditCard
和CustomerId
都是關鍵屬性,所有 FD 要麼滿足 2 要麼滿足 3。
BCNF
非常相似,但它只允許 . 允許的條件 1 和 23NF
。由於第 3 個條件不允許BCNF
,並且兩者都CID -> CC
使用CC -> CID
條件 3,因此該表不是BCNF
,但它是3NF
。出於實際目的,這種情況相當罕見,而且這些資訊是迂腐的。
CreditCard/CustomerId
您的桌子有問題的贈品將是在您的桌子上重複配對的事實。您還可能認識到,如果沒有這種罕見的情況,表甚至不會存在,2NF
其中 FD 的右側可能是鍵屬性,因為CreditCard
它部分依賴於主鍵(它依賴於CustomerId
但不依賴於EquipmentId
orDate
.