7

Ho letto molte fonti diverse su come differenziare le relazioni che sono in 3NF/BCNF. E ho finora questo è la mia comprensione ...Trovare una relazione in 3NF ma non in BCNF

userò questa relazione come un esempio ...

R = {A, B, C, D, E}

e

F = {A -> B, B C - > E, E D -> A}.

In primo luogo dobbiamo trovare le chiavi della relazione. I used this video to help me do that. e ho avuto

Keys = {ACD, BCD, CDE}

Ora per assicurarsi R è in BCNF , dobbiamo fare in modo che il lato sinistro di ogni dipendenza funzionale in F è uno dei Keys. Sappiamo immediatamente che questo non è il caso, perché il primo FD è A -> B e A non è una delle chiavi. Quindi non è in BCNF.

Ora per assicurarsi R è in 3NF, dobbiamo fare in modo che il lato sinistro di ogni dipendenza funzionale in F è uno dei KeysOR lato destro di ogni dipendenza funzionale in F è un sottoinsieme di uno degli Keys. Se si guarda il lato destro di ogni FD, sono B, E e A. Questi sono ciascuno un sottoinsieme di Key, quindi questo significa che è in 3NF.

Quindi questo è uno dei rari casi (secondo wiki) in cui una relazione è in 3NF ma non in BCNF. Questo metodo è corretto? È affidabile? Mi sto perdendo qualcosa?

+1

Sì, hai fatto tutto bene. – laurids

+0

si consiglia di controllare questo: http://class2go.stanford.edu/db/Winter2013 – laurids

risposta

1

Per prima cosa è necessario imparare le superkeys, le chiavi candidate e gli attributi primari.

Tuttavia, questa regola aiuta:

Una tabella 3NF che non ha più chiavi candidate che si sovrappongono è garantito per essere in BCNF.

In altre parole, se le chiavi candidati in una relazione 3NF sono

  • tutto atomico, o
  • non-atomico ma non sovrapposte,

spetta garantito che la relazione sia in BCNF.

Il rapporto più semplice che viola BCNF ma soddisfa 3NF ha le seguenti dipendenze funzionali:

A,B -> C C -> B

In questo caso, chiavi candidate sono (A,B) e (A,C).
soddisfa 3NF perché

  • di destra-lato di tutte le dipendenze funzionali è un attributo primario .

Viola BCNF perché

  • C -> B, ma la mano-lato di sinistra non è un superchiave.
2

BCNF:

X-> Y dove Y può essere primo o non-prime
Qui, X deve essere un super-chiave

3NF:

X-> Y dove Y è non-prime
poi,
X deve essere un super-chiave
altro
X non c'è bisogno di esseresuper-chiave

Spero che questo aiuti

+2

Questi non sono chiari o corretti. Guarda alcune definizioni di libri di testo, o anche wikipedia. – philipxy

+0

Le definizioni sono vaghe. Ad esempio, per BCNF puoi semplicemente affermare che X deve essere una super chiave. La definizione di 3NF è corretta, ma questo è il modo più complicato per descriverlo! – AHA