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à.
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à:
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.
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è Padre nè Figlio 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:
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 |