CodeGym /Corsi /SQL SELF /Principi della Prima Forma Normale (1NF)

Principi della Prima Forma Normale (1NF)

SQL SELF
Livello 25 , Lezione 1
Disponibile

La Prima Forma Normale (First Normal Form, 1NF) è la fase iniziale della normalizzazione di un database che impone regole rigide sulla struttura delle tabelle. Una tabella è in 1NF se:

  1. Tutti i dati sono atomici. Ogni valore in una cella della tabella deve essere indivisibile. Addio, "liste in una cella"! In un database non si fa così.
  2. Ogni riga è unica. Cioè la tabella deve avere una chiave primaria (Primary Key) o un identificatore unico.
  3. Nessun gruppo di dati ripetuto. I valori della stessa entità non devono essere rappresentati nella stessa colonna.

Per dirla semplice, immagina che la tabella del database sia la tua stanza e i valori atomici siano oggetti separati: lampada, tavolo, libro. Se la stanza è un casino (tipo, tutte le cose buttate in un mucchio), non riuscirai a trovare la lampada o a capire al volo se hai un tavolo di riserva. La normalizzazione ti aiuta a "mettere tutto in ordine sugli scaffali".

Esempio di violazione della 1NF

Immagina di avere una tabella studenti dove salviamo le info sui corsi che frequentano:

student_id name courses
1 Maria "Matematica, Fisica"
2 Rob "Biologia, Chimica"

Perché questa struttura non va bene? I corsi (colonna courses) sono scritti separati da virgola in una sola cella. Questo significa che se vogliamo, per esempio, trovare tutti gli studenti che studiano fisica, la query diventa un incubo: bisogna fare trasformazioni di testo complicate. E se uno studente vuole togliere fisica dalla lista — ecco un altro problema. Questi dati non sono atomici, quindi violano la regola base della 1NF.

Come portare la tabella in 1NF?

Per risolvere il problema, dividiamo i dati in righe separate, dove ogni valore della tabella è atomico:

student_id name course
1 Maria Matematica
1 Maria Fisica
2 Rob Biologia
2 Rob Chimica

Ora va tutto bene. Abbiamo trasformato la nostra tabella in modo che ogni valore in una cella sia indivisibile. Questo rispetta i principi della 1NF.

Esempio dettagliato di violazione e correzione della 1NF

Supponiamo di avere una tabella ordini di un negozio online:

order_id customer_name items
1001 Otto Lin "Notebook, Mouse, Tastiera"
1002 Anna Song "Smartphone, Custodia"

Ovviamente qui items contiene più valori separati da virgola, il che viola la 1NF.

Per portare i dati in 1NF, salviamo una riga per ogni articolo nell’ordine:

order_id customer_name item
1001 Otto Lin Notebook
1001 Otto Lin Mouse
1001 Otto Lin Tastiera
1002 Anna Song Smartphone
1002 Anna Song Custodia

Ora la struttura della tabella rispetta i principi della 1NF. Ogni ordine e articolo sono rappresentati come una riga separata e i valori sono atomici.

Aggiunta della chiave primaria

Dopo aver trasformato la tabella, è importante aggiungere un identificatore unico (chiave primaria) per ogni riga, così da garantirne l’unicità. Nell’esempio sopra puoi usare la combinazione di order_id e item come chiave primaria composta. Però nella vita reale di solito si crea un campo separato id.

id order_id customer_name item
1 1001 Otto Lin Notebook
2 1001 Otto Lin Mouse
3 1001 Otto Lin Tastiera
4 1002 Anna Song Smartphone
5 1002 Anna Song Custodia

Esercizio pratico

Hai una tabella studenti con le materie che studiano, tutte nella stessa cella:

student_id name subjects
1 Polly "Matematica, Chimica"
2 Peter "Fisica, Informatica"

Porta la tabella in una forma che rispetti la 1NF.

Dopo la trasformazione la tabella dovrebbe essere così:

student_id name subject
1 Polly Matematica
1 Polly Chimica
2 Peter Fisica
2 Peter Informatica

Errori più comuni quando si lavora con la 1NF

Quando lavori con un database, le violazioni della 1NF possono capitare in questi casi:

  • Salvare liste o array direttamente nella tabella. Questo è l’errore più frequente.
  • Mancanza di un identificatore unico per le righe (chiave primaria). Così la tua tabella rischia di avere dati duplicati.
  • Usare più colonne per salvare la stessa informazione. Tipo "course_1", "course_2", "course_3" — invece della struttura giusta.

Tieni a mente questi punti e il tuo database rispetterà la Prima Forma Normale.

Applicazione pratica della 1NF

Nei progetti reali la 1NF è fondamentale. Per esempio:

  • Nei CRM (Customer Relationship Management) i dati sui clienti e le loro azioni devono essere atomici. Così analisi e ricerca sono più semplici.
  • Negli e-commerce la 1NF serve per salvare in modo efficiente info su ordini, prodotti e clienti.
  • Nei sistemi bancari i dati su clienti, conti e transazioni devono essere atomici, per evitare confusione tra operazioni diverse.

Seguire i principi della 1NF aiuta a progettare database che reggono carichi elevati e restano facili da usare. Tutto ok, ma ora c’è duplicazione di dati. Per questo si passa alla Seconda Forma Normale (2NF), dove diventa più chiaro come gestire le dipendenze parziali nelle tabelle.

Perché è importante rispettare la Prima Forma Normale (1NF)? Immagina di salvare dati in una tabella dove in una cella ci sono più valori — tipo una lista di prodotti ordinati da un cliente. Così diventa difficile lavorare con i dati: cercare tutti quelli che hanno ordinato una "Tastiera" è una tortura. E se devi cambiare o cancellare parte delle info, è facile sbagliare. Quando i dati sono atomici — cioè ogni campo contiene solo un valore — lavorarci è più affidabile e chiaro. Inoltre, queste tabelle sono più facili da scalare, aggiornare e ristrutturare quando serve.

2
Compito
SQL SELF, livello 25, lezione 1
Bloccato
Lavorare con tabelle reali
Lavorare con tabelle reali
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION