La Normalizzazione

La normalizzazione consiste nell'applicare una serie di trasformazioni alle tabelle di un data base relazionale, secondo alcune regole.

Le regole della normalizzazione hanno lo scopo di prevenire inconsistenze, ripetizioni o incoerenze dei dati. Ogni passo della normalizzazione garantisce che lo schema rispetti una nuova proprietà.

Prima Forma Normale

Sotto la prima forma normale, tutti i record di una tabella devono contenere lo stesso numero di campi.

La prima forma normale non ammette che in un record ci siano campi opzionali o multipli. Il seguente è un esempio di tabella che non rispetta la prima forma normale.

Un libro può avere un numero variabile di autori. Quanti campi bisogna riservare in un record?
Qualunque sia il numero di campi riservati si incorre sempre in un inconveniente. Infatti si osservi il seguente esempio:

Titolo Libro Autore1 Autore2 Autore3
Elementi di Matematica Bianchi A. Rossi M. Verdi G.
il mistero dei numeri primi Du Sautoy M.    

Affinchè la tabella rispetti la prima forma normale, si devono rimuovere i campi multipli (Autore1, Autore2, ecc) e disporli in una tabella separata

Titolo Libro Autore
Elementi di Matematica Bianchi A.
Elementi di Matematica Rossi M.
Elementi di Matematica Verdi G.
il mistero dei numeri primi Du Sautoy M.

Una tabella è in prima forma normale se valgono le seguenti proprietà:

  1. Tutti i record hanno lo stesso numero di campi e in ciascuno di essi ci sarà un valore
  2. nessun campo di un record è ulteriormente scomponibile, ad esempio non ci deve essere un campo del tipo: elenco figli, elenco autori, ...
  3. Un campo è di uno stessso tipo per tutti i record,
  4. non ci sono due record uguali
  5. non esiste un criterio di ordinamento per i record della tabella

La seconda e la terza forma normale riguardano le relazioni fra la chiave (formata da più campi) e gli altri attributi che non fanno parte della chiave.

In queste due forma normali un attributo non chiave deve riguardare l'intera chiave. Ogni record deve contenere solo dati che riguardano l'entità identificata dalla chiave primaria. Inoltre la seconda e la terza forma normale richiedono che sia rispettata la prima forma normale.

Seconda forma normale

.

Quando la chiave primaria di una tabella è formata da più campi, la tabella deve rispettare la

seconda forma normale
Una relazione è in seconda forma normale se, oltre a rispettare la prima forma normale, nessun campo della tabella, tra quelli che non fanno parte della chiave primaria, dipende solo da alcuni campi della chiave primaria.

La seconda forma normale è violata quando un attributo non chiave riguarda solo un sottoinsieme della chiave primaria.

La seconda forma normale è rilevante solo per tabelle la cui chiave è composta, cioè consiste di diversi attributi.

Queste tabelle sono quelle che corrispondono a "relazioni fra entità" nel modello Entity Relationship, in opposizione alle altre tabelle che rappresentano "entità".

Si consideri la relazione Padre-Figlio ma con l'aggiunta dell'indirizzo del padre.

Padre Indirizzo Figlio
M. Rossi Via degli Orti, 4 Alberto
M. Rossi Via degli Orti, 4 Lucia
M. Rossi Via degli Orti, 4 Rinaldo
S. Bianchi Corso Traiano, 5 Lucia

Nell'esempio la chiave primaria è composta dai due attributi <Padre, Figlio>. L’attributo Padre da solo non forma una chiave.

Si ricordi che la chiave primaria è quella che identifica univocamente ogni ennupla di una tabella.

In questa tabella nè PadreFiglio bastano, da soli, a identificare un record, ma il loro abbinamento sì.

Tuttavia, il campo Indirizzo riguarda solo una parte della chiave, cioè il nome del padre.

Gli inconvenienti sono:

  1. l'indirizzo è ripetuto in ogni record, sprecando spazio nella base dati;
  2. se l'indirizzo del padre cambia, ogni record della relazione deve essere modificato;
  3. a causa della duplicazione ci possono essere inconsistenze, con diverse ennuple per lo stesso padre che contengono indirizzi diversi - magari lo stesso indirizzo ma scritto con due grafie differenti;
  4. se un padre non ha un figlio non si sa dove andare a scrivere il suo indirizzo; tenere una ennupla con il nome del figlio = NULL naturalmente contravverrebbe la prima forma normale.

La normalizzazione in seconda forma normale richiede di spezzare la tabella in due tabelle. In questo modo si evitano tutti gli inconvenienti citati.

Padre Figlio
M. Rossi Alberto
M. Rossi Lucia
M. Rossi Rinaldo
S. Bianchi Lucia

Padre Indirizzo
M. Rossi Via degli Orti, 4
S. Bianchi Corso Traiano, 5


Nella normalizzazione si deve fare attenzione a non perdere informazioni. Si consideri l'esempio seguente, (si assume che ogni prodotto ha lo stesso prezzo per tutti i venditori).

Venditore Indirizzo Prodotto Prezzo
M. Rossi Via degli Orti, 4 Cipolle 2.00
M. Rossi Via degli Orti, 4 Patate 1.50
S. Bianchi Corso Traiano, 5 Carote 1.00
S. Bianchi Corso Traiano, 5 Cipolle 2.00

La tabella non è in seconda forma normale perchè la chiave è formata dalla combinazione <Venditore, Prodotto>, ma il Venditore da solo è sufficiente a determinare l'Indirizzo, mentre il Prodotto da solo determina il Prezzo.

Le tabelle <Venditore, Indirizzo> e <Prodotto, Prezzo> sono in seconda forma normale ma suddividere la tabella di partenza in queste sole due relazioni è sbagliato perchè si perde l'informazione di cosa vende ciascun venditore. La tabella precedente in seconda forma normale si divide non in due, ma in tre tabelle:

Venditore Indirizzo
M. Rossi Via degli Orti, 4
M. Rossi Via degli Orti, 4
S. Bianchi Corso Traiano, 5
S. Bianchi Corso Traiano, 5

Prodotto Prezzo
cipolle 2.00
patate 1.50
carote 1.00

Venditore Prodotto
M. Rossi Cipolle
M. Rossi Patate
S. Bianchi Carote
S. Bianchi Cipolle



terza forma normale
Una relazione è in terza forma normale se, oltre a rispettare la seconda forma normale, nessun campo della tabella, tra quelli che non fanno parte della chiave primaria, dipende altri da campi che non sono chiave primaria.

La terza forma normale è violata quando un attributo che non è la chiave primaria riguarda un altro attributo che non è la chiave primaria.

Si consideri la seguente tabella:

Impiegato Indirizzo-Ditta Nome-Ditta
G. Verdi Torino Fiat
S. Bianchi Roma Banca d’Italia
M Rossi Torino Fiat

La chiave primaria è Impiegato. L'attributo Indirizzo-Ditta riguarda più propriamente Nome-Ditta che il nome dell'Impiegato.

Tutti gli impiegati di una stessa ditta infatti hanno lo stesso Indirizzo-Ditta. Gli inconvenienti di questo schema sono analoghi a quelli della violazione della seconda forma normale:

La soluzione di queste anomalie consiste nel portarsi alla terza forma normale spezzando in due la tabella.

Impiegato Nome-Ditta
G. Verdi Fiat
S. Bianchi Banca d’Italia
M. Rossi Fiat


Indirizzo-Ditta Nome-Ditta
Torino Fiat
Roma Banca d’Italia