Hai mai visto una tabella di database che sembra un magazzino di roba a caso? In una cella c'è una lista di numeri di telefono, in un'altra — indirizzi scritti tutti in una frase lunga, in una terza — diverse date separate da virgole. Questo "caos" rende difficile cercare, aggiornare e gestire i dati. Ma c'è una via per mettere ordine. Si chiama normalizzazione dei dati.
In parole semplici, la normalizzazione dei dati è il processo di organizzare i dati nelle tabelle in modo da minimizzare la ridondanza e risolvere i problemi legati ad aggiornamenti, cancellazioni e inserimenti.
Ecco quali problemi risolve la normalizzazione dei dati:
- Eliminazione della duplicazione dei dati. Perché dovremmo salvare la stessa informazione due volte? O tre? Questo aumenta la dimensione del database e porta a inconsistenze.
- Minimizzazione delle anomalie. Sai, come nella vita ci sono anomalie? Tipo, ti dimentichi di cancellare un ex collega dalla rubrica. Nei database succede lo stesso. La normalizzazione aiuta a evitare questi momenti imbarazzanti.
- Semplificazione della struttura dei dati. Più semplice è la struttura, più facile è gestirla.
- Velocizzazione delle query. Meno dati — query più veloci.
E se non normalizziamo?
Senza normalizzazione i dati nel database diventano "appiccicosi" — si portano sempre dietro pezzi di informazione inutili.
Immagina la tabella Studenti:
| ID Studente | Nome | Corsi |
|---|---|---|
| 1 | Otto Lin | Matematica, Fisica |
| 2 | Anna Song | Chimica |
| 3 | Otto Lin | Biologia, Chimica |
Cosa può andare storto:
- Duplicazione dei dati:
Otto Linappare più volte. Perché? Perché segue più corsi. - Difficile aggiornare le informazioni: se il numero di telefono dello studente Otto Lin cambia, dobbiamo cercare tutte le sue righe per aggiornare il numero.
- La cancellazione può rompere l'integrità: immagina che Otto decida di lasciare i corsi. Se cancelliamo tutte le sue righe, perdiamo tutte le info su di lui, incluso il nome.
Quando la normalizzazione può essere eccessiva?
Diciamolo chiaro, la normalizzazione è come un orario super rigido: sempre utile, ma a volte vuoi un po' di spontaneità. In realtà ci sono casi in cui la denormalizzazione è meglio:
- Nei database analitici, dove conta la velocità delle query, non la minimizzazione dello spazio.
- Quando la struttura diventa troppo complessa: se per rispettare le normal form dobbiamo lavorare con decine di tabelle, le query diventano sempre più pesanti.
- Per aggregati usati spesso: se calcoli sempre la stessa somma, meglio salvarla direttamente.
Supponiamo di avere un e-commerce. Se gli utenti cercano spesso la somma totale degli ordini, puoi salvarla direttamente nella tabella Ordini invece di ricalcolarla ogni volta.
Ma occhio: la denormalizzazione è un compromesso. Aumenta il rischio di errori quando aggiorni i dati.
Esempi di struttura problematica e la sua normalizzazione
Vediamo un esempio di tabella prima della normalizzazione:
| ID Ordine | Cliente | Prodotti | Totale ordine |
|---|---|---|---|
| 1 | Otto Lin | Telefono, Cuffie | 20000 |
| 2 | Anna Song | Frigorifero | 30000 |
| 3 | Otto Lin | Televisore | 40000 |
Qui si vede chiaramente la violazione:
- I dati dei clienti si ripetono.
- I prodotti sono salvati come lista — questo viola il principio di atomicità dei dati.
Dopo la normalizzazione
Dividiamo questa tabella in tre: Tabella Clienti
| ID Cliente | Nome |
|---|---|
| 1 | Otto Lin |
| 2 | Anna Song |
Tabella Prodotti
| ID Prodotto | Nome | Prezzo |
|---|---|---|
| 1 | Telefono | 10000 |
| 2 | Cuffie | 10000 |
| 3 | Frigorifero | 30000 |
| 4 | Televisore | 40000 |
Tabella Ordini
| ID Ordine | ID Cliente | ID Prodotto |
|---|---|---|
| 1 | 1 | 1 |
| 1 | 1 | 2 |
| 2 | 2 | 3 |
| 3 | 1 | 4 |
Ora abbiamo:
- Nessuna duplicazione dei dati.
- Ogni prodotto è in una riga separata.
- Possiamo aggiungere facilmente nuovi prodotti e ordini.
La normalizzazione è l'arte di creare ordine dal caos. Sì, a volte può sembrare troppo rigida e pignola, ma il suo scopo finale vale tutto lo sforzo. Nelle prossime lezioni studieremo le normal form una per una: prima 1NF, poi 2NF e infine 3NF. Avanti, verso un mondo di dati ordinati!
GO TO FULL VERSION