Gentilmente offerto da Kevin Speranza.

attensionplis

  • se lo schema è in BCNF allora è anche 3NF
  • dipendenza banale:
  • prima di effettuare le verifiche:

Boyce Codd (BCNF)

definizione

Uno schema relazionale è in BCNF se per ogni dipendenza non banale di , saranno del tipo

  • X superchiave (è una chiave o la contiene)

Algoritmo

output algoritmo

Dato uno schema R e dipendenze funzionali F, l’algortimo restituisce una decomposizione in BCNF che preserva i dati

finezza da scrivere

“la decomposizione trovata non è l’unica, dipende dall’ordine con cui vengono analizzate le dipendenze”

passaggi

ad ogni chiamata si decompone F in 2 sottorelazioni con annessi insiemi di dipendenze funzionali e ricorsivamente si controllano le condizioni BCNF.

Sia XA la dipendenza che viola:

  • R: insieme di attributi controllato
  • F: insieme di dipendenze funzionali

Esempio

R(A,B,C,D,E,F)
F = {
	A-> B,
	C -> DE,
	F->A
}

la chiave è CF. si calcola con l’algoritmo chiavi.

AB viola la bcnf (A non è una chiave).

R1 = X+ = A+ = {A,B}
F1(A->B) [rispetta BCNF]

R2 = R - (R1 - X) = {A,B,C,D,E,F} - {A,B - A} = {A,B,C,D,E,F} - {B} = {A,C,D,E,F}
F2(C -> DE, F->A)

in R2 “CDE” viola la bcnf:

R2 = C+={cde}
F2(c->de) [rispetta BCNF]

R3 = {acdef} - (cde - c) = {acdef} - {de} = {acf}
F3(F->A)

in R3 “F A” viola la bcnf:

R3 = X+ = F+ = {AF}
F3 = {F A} [rispetta BCNF]

R4 = R - (R3 - X) = {acf} - (af - f) = acf - a = {cf}
F4 = {} [rispetta BCNF]

la decomposizione finale sarà la seguente:

R1(a,b) F1(ab)
R2(c,d,e) F2(cde)
R3(a,f) F3(fa)
R4(c,f) F4()

Terza forma normale (3NF)

definizione

Uno schema relazionale è in 3NF se per ogni dipendenza non banale

  • è una superchiave
    oppure
  • è primo (appartiene a qualche chiave)

Algoritmo

trasformare in 3NF

  1. creo una tabella formata dagli attributi non presenti in F
  1. per ogni dipendenza di F creo una tabella apposita

"X" ridondanti

nel caso in cui F sia del tipo

al posto di creare un ulteriore tabella, unisco l’attributo alla tabella già esistente

preservazione dati

se vogliamo far preservare i dati, creiamo una tabella che contiene una chiave:

Verifica forma normale con più decomposizioni

soluzione generale

nel caso chieda di verificare se la decomposizione sia in qualche forma normale (avendo più di una decomposizione) sarà necessario per ogni decomposizione:

  1. estendere l’insieme di dipendenze funzionali
  2. verificare le condizioni della forma normale in question (con F estesa)

per ogni decomposizione calcolare:

e verificare se rispetta la forma normale rispetto ad

esempio di domanda

data la decomposizione

R1(A,B)
R2(B,D,E)
R3(B,C)

e le dipendenze

F = {
b->c,
c->de
}
  • È in qualche forma conosciuta? motivare la risposta ed stendere gli schemi con le rispettive dipendenze funzionali

soluzione

estendo F

calcolo
  1. calcolo le seguenti chiusure:
  1. tolgo la lettera che li rappresenta:
  1. vado a prendere per ogni insieme solo gli elementi che stanno in R1

per ogni insieme considerare la dipendenza ""

in questo caso, rispetta la bcnf

calcolo
  1. calcolo le seguenti chiusure:
  1. tolgo la lettera che li rappresenta:
  1. vado a prendere per ogni insieme solo gli elementi che stanno in R2

rispetta

calcolo

in conclusione la decomposizione generale rispetta la BCNF.