CodeGym /Corsi /SQL SELF /Principi della Seconda Forma Normale (2NF)

Principi della Seconda Forma Normale (2NF)

SQL SELF
Livello 25 , Lezione 2
Disponibile

Una tabella si considera in seconda forma normale se:

  1. È già in prima forma normale (1NF).
  2. Ogni colonna non chiave dipende da tutta la chiave primaria, e non solo da una parte della chiave.

Se la chiave primaria è composta da più campi (chiave composta), nessun attributo non chiave (colonna) deve dipendere solo da una parte di questa chiave. In altre parole, la 2NF elimina le dipendenze parziali.

Esempio di violazione della 2NF

Supponiamo di avere una tabella student_courses (Studenti e Corsi), che memorizza informazioni sugli studenti, i loro corsi e i docenti:

student_id course_id course_name instructor_name
1 101 Matematica Lin
1 102 Letteratura Song
2 101 Matematica Lin
  • student_id e course_id insieme formano la chiave primaria composta.
  • Ma fai attenzione alle colonne course_name e instructor_name. Dipendono solo da course_id, non dall'intera coppia (student_id, course_id).

Ecco qui, una dipendenza parziale! course_name e instructor_name dipendono solo da una parte della chiave composta (course_id). Questo viola i principi della 2NF.

Portare la tabella in 2NF

Il nostro obiettivo è eliminare la dipendenza parziale, dividendo la tabella in due. Così eliminiamo la ridondanza e miglioriamo la coerenza dei dati.

Separiamo le informazioni sui corsi in una tabella a parte, courses:

course_id course_name instructor_name
101 Matematica Lin
102 Letteratura Song

La tabella principale diventa così:

student_id course_id
1 101
1 102
2 101

Ora ogni colonna dipende da tutta la chiave primaria. Abbiamo separato i dati in modo logico e risolto la violazione della 2NF.

La magia dell'eliminazione della ridondanza

Dai un'occhiata alla tabella prima della normalizzazione. Nella colonna instructor_name si ripete il nome "Lin". E quanti di questi duplicati potrebbero esserci in un database reale con migliaia di record? Dividendo le tabelle abbiamo eliminato la ridondanza e ridotto il rischio di errori, tipo refusi ("Lin" vs "Ling").

Esempio dalla vita reale

Immagina di gestire gli ordini dei prodotti. Hai la seguente tabella order_items (ordini e prodotti), dove order_id e item_id formano la chiave primaria:

order_id item_id item_name price
1 101 Laptop 50000
1 102 Mouse 1000
2 101 Laptop 50000

Come vedi, i prezzi e i nomi dei prodotti si ripetono. Questo è un segno di violazione della 2NF, perché item_name e price dipendono solo da item_id.

Per portare la tabella in 2NF creiamo la tabella items:

item_id item_name price
101 Laptop 50000
102 Mouse 1000

E modifichiamo la tabella order_items, lasciando solo gli identificatori di ordine e prodotto:

order_id item_id
1 101
1 102
2 101

Ora i dati sono puliti come il codice dopo una code review — niente più ridondanza.

Esercizio pratico: prova tu!

Supponi di avere una tabella employee_projects, che contiene informazioni sui dipendenti, i loro progetti e i manager dei progetti:

employee_id project_id project_name manager_name
1 201 CRM Upgrade Lin
2 202 Website Revamp Ming
1 202 Website Revamp Ming

Prova a:

  1. Trovare le dipendenze che violano i requisiti della 2NF.
  2. Dividere la tabella in due, eliminando la violazione.

Perché è importante rispettare la 2NF?

Perché dovresti rispettare la seconda forma normale (2NF)? Semplice: per evitare che i dati si duplicano e creino confusione. Quando elimini le dipendenze parziali, le tabelle diventano più pulite — senza informazioni ripetute, come lo stesso nome del docente in ogni riga. Risparmi spazio e riduci il rischio di inconsistenze: aggiorni un nome in un posto solo — ed è subito aggiornato ovunque.

In più, scrivere query su un database così è più facile: quando la struttura è logica e i dati non sono sparsi in mille righe, filtrare e raggruppare è più veloce e affidabile. Sì, il prezzo da pagare sono query SQL un po' più complesse con JOIN, perché le tabelle aumentano. Ma meglio un JOIN che cento righe con gli stessi cognomi. Nella maggior parte dei casi, la normalizzazione vale la pena.

Integrazione nei progetti reali

Conoscere la 2NF ti sarà utile:

  • Quando progetti un database: ti aiuta a evitare il caos nelle tabelle.
  • Al colloquio: spesso ti chiedono di spiegare o portare tabelle in forma normale.
  • Sul lavoro vero: quando ti affidano l'ottimizzazione di un database esistente, spezzando tabelle "monolitiche" in tabelle normalizzate.

La seconda forma normale (2NF) aiuta a eliminare le dipendenze parziali in una tabella dove la chiave primaria è composta. Dividiamo le tabelle in blocchi logici, così che ogni colonna dipenda solo da tutta la chiave, non da una sua parte. Questo migliora la qualità del database, elimina la ridondanza e lo rende più flessibile. Pronti per la terza forma normale? Andiamo avanti!

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