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).

Anomalie di modifica

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.

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.


Concetti Fondamentali

Dipendenza Funzionale

Attributo Primo


Prima Forma Normale

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.

Problema

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>

Soluzione

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