CodeGym /Corsi /SQL SELF /Introduzione alla normalizzazione dei dati

Introduzione alla normalizzazione dei dati

SQL SELF
Livello 25 , Lezione 0
Disponibile

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:

  1. 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.
  2. 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.
  3. Semplificazione della struttura dei dati. Più semplice è la struttura, più facile è gestirla.
  4. 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 Lin appare 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:

  1. Nei database analitici, dove conta la velocità delle query, non la minimizzazione dello spazio.
  2. Quando la struttura diventa troppo complessa: se per rispettare le normal form dobbiamo lavorare con decine di tabelle, le query diventano sempre più pesanti.
  3. 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!

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION