La normalizzazione di un database è un processo di progettazione che mira a organizzare i dati in modo efficiente, riducendo la ridondanza e migliorando l'integrità dei dati. Ecco una descrizione dettagliata del processo:
Obiettivi della normalizzazione
- Eliminare la ridondanza dei dati
- Evitare anomalie di inserimento, aggiornamento e cancellazione
- Garantire l'integrità referenziale
- Semplificare le query
- Ottimizzare lo spazio di archiviazione
Forme normali principali
Prima Forma Normale (1NF)
- Ogni tabella deve avere una chiave primaria
- Ogni colonna deve contenere valori atomici (non divisibili)
- Eliminazione delle ripetizioni di gruppi di dati
Esempio
Un elenco clienti con più numeri di telefono in un'unica colonna:
ID_Cliente | Nome | Telefoni
1 | Mario Rossi | 333-1234567, 02-87654321
...
Normalizzato in 1NF:
ID_Cliente | Nome
1 | Mario Rossi
ID_Telefono | ID_Cliente | Telefono
1 | 1 | 333-1234567
2 | 1 | 02-87654321
...
Seconda Forma Normale (2NF)
- Deve essere già in 1NF
- Tutti gli attributi non-chiave devono dipendere dall'intera chiave primaria (non da una parte di essa)
Esempio
Ordine_Prodotto (ID_Ordine, ID_Prodotto, Quantità, Prezzo_Prodotto, Nome_Prodotto)
Normalizzato in 2NF:
Ordine_Prodotto (ID_Ordine, ID_Prodotto, Quantità)
Prodotti (ID_Prodotto, Prezzo_Prodotto, Nome_Prodotto)
Terza Forma Normale (3NF)
- Deve essere già in 2NF
- Nessun attributo non-chiave deve dipendere da altri attributi non-chiave
Esempio
Clienti (ID_Cliente, Nome, Codice_Postale, Città, Regione)
Dove Città e Regione dipendono dal Codice_Postale.
Normalizzato in 3NF:
Clienti (ID_Cliente, Nome, Codice_Postale)
Località (Codice_Postale, Città, Regione)
Forma Normale di Boyce-Codd (BCNF)
- Estensione della 3NF
- Per ogni dipendenza funzionale X → Y, X deve essere una superchiave
Quarta Forma Normale (4NF)
- Risolve dipendenze multivalore
- Ogni tabella rappresenta un solo tipo di relazione
Quinta Forma Normale (5NF)
- Risolve dipendenze di join
- Garantisce che una tabella non possa essere scomposta senza perdita di informazioni
Processo pratico di normalizzazione
- Identificare l'entità principale e i suoi attributi
- Creare una tabella iniziale con tutti i dati
- Applicare la 1NF eliminando i gruppi ripetitivi
- Applicare la 2NF identificando le dipendenze parziali
- Applicare la 3NF identificando le dipendenze transitive
- Valutare se applicare forme normali superiori in base alle esigenze
Considerazioni finali
- La normalizzazione completa non è sempre l'obiettivo finale
- A volte è necessario denormalizzare per motivi di prestazioni
- Il livello ottimale di normalizzazione dipende dal caso d'uso specifico
- In contesti di data warehouse, spesso si preferiscono schemi denormalizzati (come stella o fiocco di neve)
La normalizzazione è un bilanciamento tra integrità dei dati e prestazioni, e richiede una comprensione approfondita sia del dominio applicativo che delle caratteristiche del sistema di gestione del database utilizzato.
Video
- Normalizzazione Database - Esercizio completo - https://youtu.be/HbVHkHY4K-w




