uni
Una forma normale è una proprietà di un Database relazionale (Modello Logico Relazionale) che ne garantisce la qualità, ovvero l’assenza di determinati difetti, tra cui le anomalie.
Una relazione non normalizzata:

  • presenta ridondanze
  • durante gli aggiornamenti incontra errori
    Le forme normali sono di solito definite sul Modello Logico Relazionale ma hanno senso anche in altri contesti, per esempio nel Modello Entity-Relationship.
    La normalizzazione è una procedura che permette di trasformare schemi non normalizzati in schemi che soddisfano una determinata forma normale. Questa procedura viene utilizzata come tecnica di verifica dei risultati della progettazione di una base di dati, non è una metodologia di progettazione.

Decomposizione di Schemi

Teorema:
Dato uno schema , l’insieme di schemi è una decomposizione di se e solo se
Nota bene: la precedente definizione non richiede che gli schemi siano disgiunti.
Affinché uno schema e la sua decomposizione siano equivalenti quest’ultima deve preservare i dati e preservare le dipendenze.

Teorema della perdita dei dati

Se è una decomposizione di , allora per ogni istanza di di si ha

Questo teorema ci dice che perdiamo informazione quando, ricostruendo una relazione, otteniamo più tuple che nella relazione originaria.

Decomposizione che preserva dati

Se è una decomposizione di , è una decomposizione che preserva i dati se e solo se, per ogni relazione che soddisfa , si ha:

Questa definizione ci dice che in una decomposizione che preserva dati, ogni istanza valida della relazione di partenza deve essere uguale al join naturale delle sue proiezioni sui vari .

Teorema di preservazione dei dati

Sia una decomposizione di , essa preserva i dati se e solo se oppure .
In altre parole gli attributi comuni alle due relazioni devono essere chiave in una delle due tabelle.

Decomposizione che preserva le dipendenze

Dato uno schema e una decomposizione , è una decomposizione di che preserva le FD se e solo se: , cioè se

Verificare una decomposizione che preserva le FD

Per verificare se una decomposizione di in due relazioni con attributi preserva le dipendenze bisogna verificare che
Per fare ciò è necessario:

  • saper calcolare la proiezione di un insieme di FD su un insieme di attributi: algoritmo con complessità esponenziale
  • saper determinare l’equivalenza di due insiemi di FD: algoritmo con complessità polinomiale:
    • per ogni calcoliamo e verifichiamo se
    • di nuovo invertendo e .

Proiezione di un insieme di dipendenze

Dato e , la proiezione dell’insieme di FD sull’insieme di attributi è

Algoritmo per il calcolo di

Input: e
Output:

for each do


return
Complessità Esponenziale nel caso peggiore.

Forma Normale di Boyce-Codd (BCNF)

Teorema:
Uno schema è in forma normale Boyce-Codd (BCNF) se e solo se per ogni dipendenza funzionale non banale , è una superchiave di .
Corollario:
Uno schema con copertura minimale è in BCNF se e solo se per ogni FD elementare , è una superchiave.
Questa forma normale si basa sull’idea che una dipendenza funzionale , in cui non contiene attributi estranei (Ridondanza), indica che nella realtà che modella esiste una collezione di entità omogenee univocamente identificate da .
Da questa definizione, il fatto che uno schema sia in BCNF dipende dalla chiusura e non dalla copertura , purtroppo per calcolare abbiamo solo algoritmi esponenziali. Possiamo però facilmente stabilire se uno schema è in BCNF con un algoritmo di complessità polinomiale.

Algoritmo di verifica BCNF

Input: schema
Output: true se è in BCNF, false altrimenti
for each do
if and then
return false
return true

Normalizzazione in BCNF in casi semplici

Per ogni dipendenza che viola la BCNF, definiamo una nuova relazione su ed eliminiamo dalla relazione originaria.

Algoritmo per decomposizione in BNCF che preserva i dati

Input: (per semplicità gli elementi di sono nella forma )
Output: in BNCF che preserva i dati

while esiste che non è in BCNF do
for each do
if and then



break
return
Non è garantita la preservazione delle dipendenze.

Terza Forma Normale (3NF)

Teorema:
Una relazione è in 3NF se e solo se per ogni FD non banale , è verificata almeno una delle seguenti condizioni:
- è una superchiave di
- è contenuto in almeno una chiave di (in questo caso si dice che è un attributo primo)
Quindi se è in BCNF allora è anche in 3NF:
La verifica di 3NF è un problema NP-completo e il miglior algoritmo deterministico noto ja complessità esponenziale nel caso peggiore. Occorre sapere le chiavi e l’algoritmo per farlo ha complessità esponenziale.
Si può però sempre ottenere una decomposizione in 3NF che preserva dati e FD.

Algoritmo per decomposizione in 3NF

Dividiamo una copertura minimale in gruppi tale che tutte le le FD in un gruppo abbiano la stessa parte sinistra. Da ogni gruppo si definisce uno schema di relazione composto da tutti gli attributi che appaiono in , la cui chiave, detta chiave sintetizzata, è la parte sinistra comune:
Input:
Output: che preserva i dati e le dipendenze e con ogni elemento in 3NF

  1. Trovare una copertura minimale di e porre
  2. Sostituire in ogni insieme di dipendenze con la dipendenza
  3. Per ogni dipendenza creare uno schema con attributi in
  4. Eliminare da ogni schema che sia contenuto in un altro schema di
  5. Se non contiene nessuno schema i cui attributi costituiscono una superchiave di , aggiungere a uno schema con attributi , dove è una chiave di
    Complessità polinomiale, sempre possibile e conserva dati e FD.