La normalizzazione è un procedimento matematico e logico utilizzato nella progettazione dei database relazionali. Il suo scopo principale è organizzare le tabelle per eliminare la ridondanza dei dati e proteggere il database dalle cosiddette anomalie (di inserimento, aggiornamento e cancellazione).
Consideriamo una tabella non normalizzata che mescola Ordini, Prodotti e Clienti:
| ID_Ordine (PK) | Prodotto (PK) | Prezzo | Nome_Cliente | Città_Cliente |
|---|---|---|---|---|
| 101 | Smartphone | € 500 | Mario Rossi | Roma |
| 101 | Cover | € 20 | Mario Rossi | Roma |
| 102 | Laptop | € 1000 | Luigi Bianchi | Milano |
Anomalia di Inserimento
Si verifica quando non è possibile inserire un dato perché ne manca un altro che fa parte della chiave primaria.
ID_Ordine fa parte della chiave primaria e non può essere NULL, non possiamo registrare il prodotto finché non avremo il primo ordine.Anomalia di Aggiornamento
Si verifica quando un dato ridondante viene modificato in una riga ma non in tutte le altre che contengono lo stesso valore.
Anomalia di Cancellazione
Si verifica quando l'eliminazione di un record causa la perdita involontaria di informazioni che non vorremmo eliminare.
Una tabella è in 1FN se e solo se ogni attributo contiene solo valori atomici (indivisibili) e non ci sono gruppi di attributi ripetitivi. Serve a garantire che ogni cella della tabella contenga un singolo dato elementare, facilitando le query di ricerca e ordinamento.
Esempio: Una tabella Ordini in cui ogni cliente può acquistare più prodotti
| ID_Ordine (PK) | Cliente | Prodotti |
|---|---|---|
| 101 | Mario Rossi | Smartphone, Cover |
| 102 | Luigi Bianchi | Laptop |
<aside> ⚠️
La colonna Prodotti contiene una lista di valori non atomici. Non potremmo facilmente calcolare quanti "Smartphone" sono stati venduti con una semplice query SQL.
</aside>
Si scindono i valori multipli creando una nuova riga per ciascun valore atomico. La chiave primaria deve quindi essere estesa per identificare univocamente le nuove righe.
| ID_Ordine (PK) | Prodotto (PK) | Cliente |
|---|---|---|
| 101 | Smartphone | Mario Rossi |
| 101 | Cover | Mario Rossi |
| 102 | Laptop | Luigi Bianchi |