Il DataBase e la normalizzazione

Da Caos per caso.
Jump to navigation Jump to search

Mentre redigevo il diagramma delle classi mi sono reso conto ( :lightbul: ) che molte di esse interagiscono con il database (beh, questo era ovvio, no?) e che quindi anche il DB ha bisogno di un po' di attenzione. Infatti, fino ad oggi, di progetti di database ne ho fatti un po', ma li ho quasi sempre buttati giù (magari su carta e penna prima di implementarli) a sentimento.

Perciò sono andato a rivedermi un po' di teoria.

Sul sito www.html.it ho trovato una interessante descrizione delle fasi di normalizzazione di un DataBase

La normalizzazione è una tecnica di progettazione dei database, mediante la quale si elimina la rindondanza dei dati al fine di evitare anomalie nella loro consistenza in seguito a operazioni di inserimento, cancellazione o modifica.

La normalizzazione viene eseguita in varie fasi. Al termine di ciascuna fase il database si trova in uno degli stati di normalizzazione, o come si dice di solito, è in una delle "forme normali". Le forme normali che usualmente si considerano sono:


Prima forma normale

Una tabella è in prima forma normale se non contiene colonne ripetute, che vengono usate per descrivere proprieta' dell'entita' della tabella che possono comparire in numero variabile. L'esempio classico è quello di una tabella Persona, che contiene le colonne Figlio1, Figlio2 e Figlio3, le quali descrivono i figli della persona. E' evidente che, nel caso in cui la persona abbia meno di tre figli, alcune colonne non saranno utilizzate. Inoltre sara' impossibile rappresentare una persona con piu' di tre figli. Per portare tale tabella in forma normale occorre scomporla in due tabelle: una per la persona, senza le colonne dei figli; l'altra per i figli, contenente una chiave esterna verso la tabella delle persone, indicante la la riga che rappresenta il genitore.


Seconda forma normale

Un tabella è in seconda forma normale se è in prima forma normale e tutti i suoi attributi sono funzionalmente dipendenti dall'intera chiave primaria.

Per portare una tabella ad essere in seconda forma normale bisogna eliminare tutti gli attributi che non dipendono dalla chiave primaria.


Terza forma normale

Una tabella è in terza forma normale se è in seconda forma normale e nessuno dei suoi attributi è transitivamente dipendente dalla chiave primaria. Avere una dipendenza transitiva significa che una colonna dipende da un'altra colonna descrittore, la quale a sua volta dipende dalla chiave primaria. La terza forma normale si ottiene eliminando dalla tabella tutti gli attributi che dipendono dal descrittore.


Nei paraggi si trova anche una esemplificazione abbastanza utile:

Prima forma di normalizzazione: Una tabella di un database si dice "tabella in prima forma normale" se,e solo se, le informazioni presenti in due colonne sono identiche e quindi abbiamo dati ripetuti. Per portare il database alla prima forma normale, basta eliminare una delle due colonne doppie. Ad esempio, proviamo a pensare cosa succederebbe in termini sia di tempo e di spazio se in una tabella comparissero due campi con nome diversi ma contenenti il nome ed il cognome della persona in questione. Lo spazio sprecato sarebbe molto di più e anche le ricerche (avendo più dati da consultare) si allungherebbero come tempi.


Seconda forma di normalizzazione: Una tabella di un database si dice "tabella in seconda forma normale" se, e solo se, non vi è presente al suo interno una colonna che contiene dati che possono derivare da altre colonne presenti all'interno della stessa tabella. Prendiamo come esempio un catalogo prodotti di fine 2001. Ormai è inutile inserire all'interno della tabella una colonna contenente i prezzi in lire ed una coi prezzi in euro. Infatti per ottenere un dato dall'altro basta solamente dividere (se dalle lire si vuol passare all'euro) o moltiplicare (se dall'euro si vuol passare alle lire) per il valore 1936.27 . Se in un database troviamo entrambi le colonne dei prezzi, questa tabella non si può ritenere di seconda forma normale. Se invece è presente solo un prezzo e l'altro lo ricaviamo tramite un semplice calcolo, questa tabella è considerata uniforme alla seconda forma di normalizzazione.


Terza forma di normalizzazione: Un database si dice di terza forma normale se e solo se non vi sono dati duplicati all'interno dello stesso. Questo tipo di normalizzazione dobbiamo vederlo come l'ampliamento della prima. Mentre nella prima non vi devono essere dati ripetuti nella stessa tabella, qui la ripetizione dei dati non deve avvenire nelle colonne delle tabelle del database. Basta infatti una sola colonna con determinati valori e poi ci si relaziona a quella.