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.