Hai ragione sul denaro con le possibili chiavi candidate, vikkyhacks. Le chiavi candidate sovrapposte sono chiavi candidate composte (composte da più di un attributo) con almeno un attributo in comune. Quindi le chiavi candidate sovrapposte sono NM e NO (condividono N).
Spiegazione aggiuntiva di quanto sopra, originariamente lasciato nei commenti:
Tutte le chiavi candidate sovrapposte sono gruppi di (ad esempio due o più) chiavi candidate. Ciò significa che il primo criterio è che la tua relazione R
deve avere più di una chiave candidata (super chiavi minime). Affinché una qualsiasi delle chiavi candidate si sovrapponga, ciascuna di esse (di nuovo due o più) deve soddisfare alcune condizioni aggiuntive. 1) Entrambi devono essere chiavi candidate composte. Devono consistere di più di un attributo, quindi una chiave come A
non si sovrapporrà mai, ma AB
potrebbe sovrapporsi con un'altra chiave. 2) Le chiavi composite devono condividere un attributo. AB
si sovrappone a AC
e BD
ma non CD
o EF
.
Riassumendo: due o più serie di attributi in cui 1) ogni serie è una chiave candidata (superkey minima) per la relazione, 2) ogni serie è una chiave composita (è composta da più di un attributo) e 3) una o più di gli attributi delle chiavi composite si sovrappongono con un attributo di un'altra chiave nell'insieme. Quindi puoi escludere MNOP
e NOPL
sulla base del fatto che non sono superkey minime. Puoi escludere P
e L
sulla base del fatto che non sono chiavi composte (sono costituite da un attributo). Ti rimangono due chiavi NO
e NM
, che condividono l'attributo N
, hai finito.
Esempio
Può anche essere utile avere un esempio in cui puoi davvero avvolgere la testa. L'unica volta che ho mai visto dove avrai le chiavi candidate sovrapposte è quando hai 1) due attributi che si determinano funzionalmente l'un l'altro (ad es. Una relazione uno a uno tra A
e B
dove A
ha uno B
e ne B
ha uno A
) e 2) questi gli attributi fanno parte di chiavi candidate composte.
Ad esempio, in alcuni sistemi, a ne Customer
ha uno CreditCard
e a CreditCard
appartiene a uno Customer
. Nella tabella Noleggi, identifichi in modo univoco a Rental
con EquipmentId
, Date
e CustomerId
. Per comodità, hai archiviato anche CreditCard
su questa tabella.
Ciò significa che valgono i seguenti FD:
{CustomerId, EquipmentId, Date} -> {CreditCard}
{CustomerId} -> {CreditCard}
Ma dal momento che l'associazione è uno a uno, valgono anche i seguenti FD:
{CreditCard} -> {CustomerId}
{CreditCard, EquipmentId, Date} -> {CustomerId}
Poiché CustomerId
e CreditCard
può essere utilizzato in modo intercambiabile per identificare in modo univoco il cliente.
Nello scenario sopra, hai le chiavi candidate sovrapposte:
{CreditCard, EquipmentId, Date}
{CustomerId, EquipmentId, Date}
Si sovrappongono perché sono chiavi composte (sono costituite da più di un attributo) e perché almeno uno dei loro attributi è condiviso (in questo caso, condividono entrambi EquipmentId
e Date
.
Hai detto che non ti interessa BCNF
in questo momento, ma per portare completamente a casa questo, lo scenario sopra è il motivo per cui occasionalmente vedrai un tavolo che è dentro 3NF
ma non BCNF
. La tabella sopra è in 3NF
, ma non BCNF
.
3NF
consente FD dove 1) l'FD è banale 2) il lato sinistro dell'FD è una chiave candidata o 3) il lato destro dell'FD è un attributo chiave (un attributo utilizzato per creare qualsiasi chiave). Poiché CreditCard
e CustomerId
sono entrambi attributi chiave, tutti gli FD soddisfano 2 o 3.
BCNF
è molto simile, ma consente solo le condizioni 1 e 2 consentite da 3NF
. Dal momento che la terza condizione non è consentita da BCNF
entrambe, CID -> CC
ed è la CC -> CID
condizione 3, la tabella non BCNF
lo è, ma lo è 3NF
.
Ai fini pratici, il caso è piuttosto raro e questa informazione è pedante. L'omaggio che il tuo tavolo ha un problema sarà il fatto che le CreditCard/CustomerId
coppie si ripetono sul tuo tavolo. Potresti anche riconoscere che la tabella non si troverebbe nemmeno 2NF
senza questa rara condizione in cui il lato destro di un FD potrebbe essere un attributo chiave perché CreditCard
è una dipendenza parziale dalla chiave primaria (dipende da CustomerId
ma non EquipmentId
o Date
.
P
,L
,NO
, eNM
A qualifica chiave super come una chiave candidata solo se non ha una sottoinsieme minimo. Prendendo il tuo esempioMNOP
è super chiave perché il sottoinsieme minimoP
in esso può derivare tutti gli altri attributi sulla relazione