Database-Design

重疊候選鍵到底是什麼?

  • October 15, 2015

有人可以簡單地向我解釋一下什麼是overlapping candidate keyoverlapping顧名思義是什麼?

考慮以下關係

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)一個或多個複合鍵的屬性與集合中另一個鍵的屬性重疊。因此,您可以排除它們,MNOPNOPL基於它們不是最小的超級鍵。您可以排除PL基於它們不是複合鍵(它們由一個屬性組成)。你剩下兩個鍵,NONM,它們共享屬性N,所以你完成了。

例子

舉一個你可以真正理解的例子也可能會有所幫助。我見過的唯一一次你將有重疊的候選鍵是當你有 1)兩個在功能上確定彼此的屬性(例如,在 where has oneA和has one之間的一對一關係)和 2)這些屬性是複合候選鍵的一部分。B``A``B``B``A

例如,在某些系統中, aCustomer有一個CreditCard,而 aCreditCard屬於一個Customer。在 Rentals 表中,您可以通過 和RentalEquipmentId唯一標識 a 。為方便起見,您也已儲存在此表上。Date``CustomerId``CreditCard

這意味著以下 FD 成立:

{CustomerId, EquipmentId, Date} -> {CreditCard}
{CustomerId} -> {CreditCard}

但由於關聯是一對一的,因此以下 FD 也成立:

{CreditCard} -> {CustomerId}
{CreditCard, EquipmentId, Date} -> {CustomerId}

因為CustomerIdCreditCard可以互換使用,以唯一地辨識您的客戶。

在上面的場景中,您有重疊的候選鍵:

{CreditCard, EquipmentId, Date}
{CustomerId, EquipmentId, Date}

它們是重疊的,因為它們是複合鍵(它們由多個屬性組成)並且因為它們至少有一個屬性是共享的(在這種情況下,它們共享EquipmentIdDate

你說你現在不在乎BCNF,但是為了完全把這個帶回家,上面的場景是你偶爾會看到一張在3NF裡面但不在的桌子的原因BCNF。上表在3NF,但不是BCNF

3NF允許 FD,其中 1) FD 是平凡的 2) FD 的左側是候選鍵或 3) FD 的右側是鍵屬性(用於製作任何鍵的屬性)。由於CreditCardCustomerId都是關鍵屬性,所有 FD 要麼滿足 2 要麼滿足 3。

BCNF非常相似,但它只允許 . 允許的條件 1 和 2 3NF。由於第 3 個條件不允許BCNF,並且兩者都CID -> CC使用CC -> CID條件 3,因此該表不是BCNF,但它是3NF

出於實際目的,這種情況相當罕見,而且這些資訊是迂腐的。CreditCard/CustomerId您的桌子有問題的贈品將是在您的桌子上重複配對的事實。您還可能認識到,如果沒有這種罕見的情況,表甚至不會存在,2NF其中 FD 的右側可能是鍵屬性,因為CreditCard它部分依賴於主鍵(它依賴於CustomerId但不依賴於EquipmentIdor Date.

引用自:https://dba.stackexchange.com/questions/81310