Ecco un esempio pratico che illustra il concetto di colonne ripetute, violando quindi il secondo criterio per la Prima Forma Normale (1NF):
Supponiamo di avere una tabella Persona che intende tracciare i nomi dei figli di varie persone. La tabella originale potrebbe apparire così:
IDPersona | Nome | Figlio1 | Figlio2 | Figlio3 |
---|
1 | Mario | Luca | Marco | NULL |
2 | Lucia | Sara | NULL | NULL |
In questa tabella, le colonne Figlio1, Figlio2, e Figlio3 sono utilizzate per rappresentare un numero variabile di figli per ogni persona. Questo design viola la 1NF per i seguenti motivi:
Attributi non atomici: Le colonne dei figli sono usate per rappresentare più di un'entità (più figli) nella stessa riga, che può portare a problemi di gestione dei dati quando, ad esempio, una persona ha più di tre figli o meno di tre, lasciando alcune colonne vuote (NULL).
Gruppi Ripetitivi: Le colonne Figlio1, Figlio2, e Figlio3 costituiscono un gruppo di colonne che si ripete per ciascun record, rendendo la struttura della tabella non adatta a rappresentare relazioni uno-a-molti in modo efficace.
Per correggere queste violazioni e portare la tabella in 1NF, si dovrebbe ristrutturare il database separando le informazioni sui figli in una tabella separata e collegando ogni figlio alla rispettiva persona tramite una chiave esterna. La soluzione normalizzata potrebbe includere due tabelle come segue:
Tabella Persona:
IDPersona | Nome |
---|
1 | Mario |
2 | Lucia |
Tabella Figlio:
IDFiglio | NomeFiglio | IDPersona |
---|
1 | Luca | 1 |
2 | Marco | 1 |
3 | Sara | 2 |
In questo modo, ogni figlio è rappresentato in modo atomico in una propria riga nella tabella Figlio, eliminando le colonne ripetitive e consentendo una gestione flessibile del numero di figli associati a ciascuna persona. Questa struttura soddisfa il requisito della 1NF relativo all'atomicità degli attributi e all'assenza di gruppi ripetitivi.