Con l’avvento dell’integrità referenziale nello standard SQL, alcuni controlli, come la verifica dell’esistenza di un Dipartimento con lo stesso cod_dipart per un Impiegato appena inserito viene delegata al DBMS.
Per un aggiornamento corretto ed efficiente dei dati nel database questi devono essere strutturati in una maniera particolare, detta forma normalizzata.
Dobbiamo tener conto che oltre la prima, la seconda e la terza forma normale esite anche la quarta e la quinta forma normale.
Supponiamo di avere la seguente struttura dati:
ed è non normalizzata.
I FORMA NORMALE
Il primo passo è quello di eliminare i gruppi ripetitivi per arrivare alla prima forma normale (1NF o FNF).
La teoria relazionale non consente che gruppi ripetitivi di colonne siano presenti nella stessa tabella. I dettagli del progetto non possono includere gruppi relativi di colonne che descrivono i compiti degli impiegati che lavorano sul progetto. Alcuni progetti prevedono un solo compito per impiegato, altri possono averne di più.
Per mantenete intatta l’originale relazione implicita tra progetto e compito, il cod_progetto è duplicato e utilizzato come colonna della chiave della tabella Compito.
Il processo viene ripetuto per altri gruppi ripetitivi in ogni tabella, passando dall’ordine più elevato a quello più basso e duplicando le chiavi successivamente ai livelli più bassi.
2 FORMA NORMALE
Il passo 2 consiste nella rimozione delle dipendenze delle chiavi parziali per arrivare alla seconda forma normale.
Se troviamo una o più colonne dipendenti soltanto da una parte della chiave composita, allora dovremo scindere di nuovo la tabella.
Notare che la tabella DETTAGLI_IMP include dei dati ripetitivi sulle precedenti funzioni di un impiegato. Ciò implica che questa tabella non è nella prima forma normale; pertanto dobbiamo scindere le colonne in CURRICULUM.
Terza forma normale
Il passo 3 consiste nella rimozione delle colonne transitivamente dipendenti.
Questo tipo di dipendenza si verifica quando le colonne di una tabella non descrivono l’oggetto rappresentato dalla tabella stessa, ma qualcos’altro identificato da una colonna che non è parte della chiave della tabella, per esempio le colonne della tabella Impiegato che descrivono le caratteristiche del dipartimento o i progetti che descrivono i dipartimenti per i quali sono stati programmati.