La normalizzazione dei dati Teoria dell'ottimizzazione dei database di Giorgio Garabello TERZA FORMA NORMALE Il terzo passo nel processo di normalizzazione si basa sull'idea della dipendenza transitiva. Suponiamo di avere una tabella con tre colonne A, B e C. Se la colonna C e' dipendente funzionalmente dalla colonna B e questa a sua volta e' dipendente funzionalmente dalla A, allora possiamo affermare che la colonna C e' dipendente funzionalmente dalla colonna A. Nel nostro esempio possiamo vedere come la colonna QUALIFICA sia funzionalmente dipendente dalla colonna COD, la quale a sua volta e' funzionalmente dipendente dalla tabella MATR. In virtu' di quanto sopra esposto la colonna QUALIFICA e' dipendente transitivamente della colonna MATR. Per mettere i nostri dati nella terza forma normale bisogna rimuovere la dipendenza transitiva. Cio' si fa spostando la colonna QUALIFICA in una tabella separata avente come chiave primaria la colonna COD. La terza forma normale dei dati risulta quindi essere: Tabella QUALIFICHE Tabella PROGETTI +-----+-----------+ +----------+------+ | Cod | Qualifica | | Progetto | Data | +-----+-----------+ +----------+------+ | 1 | programm. | | 01 | 7/17 | | 2 | analista | | 08 | 1/12 | | 3 | manager | | 12 | 3/21 | +-----+-----------+ +----------+------+ Tabella ORE Tabella IMPIEGATI +------+----------+------+-----+ +------+-----------+-----+ | Matr | Progetto | Data | Ore | | Matr | Nome | Cod | +------+----------+------+-----+ +------+-----------+-----+ | 120 | 01 | 7/17 | 37 | | 120 | Carpi | 1 | | 120 | 08 | 1/12 | 12 | | 121 | Garabello | 1 | | 121 | 01 | 7/17 | 45 | | 270 | Parodi | 2 | | 121 | 08 | 1/12 | 21 | | 273 | Aiazza | 3 | | 121 | 12 | 3/21 | 107 | | 274 | Forenzi | 2 | | 270 | 08 | 1/12 | 10 | | 279 | Fonzeca | 1 | | 270 | 12 | 3/21 | 78 | | 301 | Siesto | 1 | | 273 | 01 | 7/17 | 22 | | 306 | Giordano | 3 | | 274 | 12 | 3/21 | 41 | +------+-----------+-----+ | 279 | 01 | 7/17 | 27 | | 279 | 08 | 1/12 | 20 | | 279 | 12 | 3/21 | 51 | | 301 | 01 | 7/17 | 16 | | 301 | 12 | 3/21 | 85 | | 306 | 12 | 3/21 | 67 | +------+----------+------+-----+ Si dice che una tabella e' in terza forma normale se essa e' nella seconda forma normale ed inoltre ogni colonna non chiave non dipende transitivamente dalla chiave primaria o, piu' semplicemente che una tabella e' in questa forma se tutte le colonne della tabella dipendono unicamente dalla chiave. QUARTA FORMA NORMALE Nella maggior parte dei casi, mettere i dati nella terza forma normale offre un buon livello di normalizzazione. Livelli pu' alti di normalizzazione sono possibili e spesso, auspicabili. Per fare un esempio comcreto occorre "complicare" un pochino il nostro data base. Suppionamo che. - un impiegato lavori a piu' progetti concomitanti - un impiegato abbia piu' di una qualifica Se si memorizzano queste informazioni su di una tabella singola e' necessario utilizzare tutte e tre le colonne come chiave, poiche' non ci sono altri gruppi di colonne che producono un'identificazione unica. Tabella IMPIEGATI-PROGETTI-QUALIFICHE +------+----------+-----------+ | Matr | Progetto | Qualifica | +------+----------+-----------+ | 120 | 01 | 1 | | 120 | 01 | 2 | | 120 | 01 | 3 | | 120 | 08 | 1 | | 120 | 08 | 2 | | 120 | 08 | 3 | +------+----------+-----------+ L'uso di una tabella singola come questa non e' auspicabile poiche' i valori devono essere ripetuti e possono causare problemi di allineamenteo in fase di modifica. In ogni caso, finche' non ci sono colonne in questa tabella che non appartengono alle chiavi, la tabella e' nella terza forma normale. Queto tipo di relazione si puo' rappresentare in modo piu' semplice se si dividono tutte le chiavi in due tabelle separate Tabella IMPIEGATI-PROGETTI Tabella IMPIEGATI-QUALIFICHE +------+----------+ +------+-----------+ | Matr | Progetto | | Matr | Qualifica | +------+----------+ +------+-----------+ | 120 | 01 | | 120 | 1 | | 120 | 08 | | 120 | 2 | +------+----------+ | 120 | 3 | +------+-----------+ Queste tabelle sono in quarta forma normale. Questa forma ci introduce un nuovo tipo di dipendenza dei dati, la "dipendenza multipla", in cui un valore dato per una singola colonna identifica piu' valori dell'altra colonna. Se torniamo a guardare la tabella IMPIEGATI-PROGETTI- QUALIFICHE notiamo infatti che la relazione tra MATR e PROGETTO e' una dipendenza multipla perche' ogni accopiata e' deteminata da MATR ed e' indipendente da QUALIFICA. Allo stesso modo la relazione tra MATR e QUALIFICA e determinata da MATR e indipendente da PROGETTO. Lo scopo della quarta dorma normale e' appunto l'eliminazione delle dipendenze multiple. Notate come le due tabelle separarte rappresentino meglio le relazioni reali tra le colonne poiche' non implica alcuna relazione diretta tra i progetti e le qualifiche. Vi e' anche una minore ridondanza dei dati nelle due tabelle separate e la loro eventuale modifica risulta ottimizzata, in quanto e' sufficiente intervenire su una piccola porzione del database per inserire nuove qualifiche o nuovi progetti. Un altro modo di analizzare la quarta forma normale e' rispetto alla ripetizione di gruppi multipli. Sistemando i dati in questa forma si eliminano i gruppi ripetitivi separandoli in tabelle diverse. In realta' i primi passi di normalizzazione spesso identificano e rimuovono automanticamente le dipendenze multiple diventano automaticamente in quarta forma normale.