La normalizzazione dei dati
Teoria dell'ottimizzazione dei database

                                          di Giorgio Garabello

QUINTA FORMA NORMALE
In tutti i passi di normalizzazione presentati finora e' stato 
possibile dividere una tabella in piu' parti conservando tutti 
i dati della tabella originale
In altre parole si puo' sempre invertire il processo e tornare 
ad un'unica tabella in prima forma normale.
Esistono alcune tabelle in quarta forma normale che non si 
possono dividere senza alterare i dati originari.
Consideriamo la tabella IMPIEGATI-PROGETTI-QUALIFICHE:
                                 
   Tabella IMPIEGATI-PROGETTI-QUALIFICHE
   +------+----------+-----------+
   | Matr | Progetto | Qualifica |
   +------+----------+-----------+
   |  120 |    01    |     2     |
   |  120 |    08    |     1     |
   |  120 |    01    |     1     |
   |  205 |    01    |     1     |
   +------+----------+-----------+

Un impiegato e' assegnato ad uno o piu' progetti con una o 
piu' qualifiche su ogni progetto.
In questo caso la combinazione particolare  del valore dei 
dati che si presentano nella tabella implica che vi e' una 
relazione non solo tra impiegatie qualifiche ma anche tra
progetto e qualifiche (certe capacita' sono proprie di ogni
progetto).

Si possono interpretare queste relazioni per dire che un 
impiegato utilizza una qualifica che possiede in un progetto 
solo se essa e' necessaria al progetto.
Cio' significa che un impiegato puo' avere capacita' non usate
dal progetto a cui e' assegnato.
Ad un primo sguardo, la tabella sembra avere le stesse 
caratteristiche dell'esempio precedente.
Supponiamo di dividere la tabella seguendo lo stesso approccio 
utilizzato per la quarta forma normale:

Tabella IMPIEGATI-PROGETTI     Tabella IMPIEGATI-QUALIFICHE
+------+----------+            +------+-----------+
| Matr | Progetto |            | Matr | Qualifica |
+------+----------+            +------+-----------+
|  120 |    01    |            |  120 |     2     |
|  120 |    08    |            |  120 |     1     |
|  205 |    01    |            |  205 |     1     |
+------+----------+            +------+-----------+

Se proviamo a riunire le tabelle otteniamo invece il seguente 
risutato:

Tabella IMPIEGATI-PROGETTI-QUALIFICHE
+------+----------+-----------+
| Matr | Progetto | Qualifica |
+------+----------+-----------+
|  120 |    01    |     2     |
|--120-|----08----|-----2-----|
|  120 |    08    |     1     |
|  120 |    01    |     1     |
|  205 |    01    |     1     |
+------+----------+-----------+

Notate che la tabella cosi' ricostruita ha una riga extra (la 
seconda) che ho provveduto ad evidenziare.
Il progetto 08 sembra avere ora bisogno di un analista (vedi 
tabella QUALIFICHE) quando in relata' i dati originali 
dimostrano che non c'e' alcun bisogno di un analista per il 
progetto 08.
La ragione di questo "errore" e' che la spaccature della 
tabella originaria nelle due in quarta forma normale non e' 
cosi' corretta come appare a prima vista in quanto non 
consente una corretta ricostruzione della realta' (come visto 
dall'aesempio).
A differenza dell'esempio precedente, in questo caso esiste 
una relazione tra PROGETTO e QUALIFICA; ogni progetto 
necessita' solo di alcune qualifiche.
Questa relazione si perde quando si scompone la tabella in due
Notate che la tabella non contiene dipendenze multiple e che
e' gia' in quarta forma normale.
In questo caso non si puo' normalizzare la tabella nella
quarta forma, occorre invece la quinta forma normale.
La divisione corretta della tabella e' la seguente

Tabella            Tabella               Tabella 
IMPIEGATI-PROGETTI IMPIEGATI-QUALIFICHE  PROGETTI-QUALIFICHE
+------+-------+   +------+-----------+  +-------+-----------+ 
| Matr | Prog. |   | Matr | Qualifica |  | Prog. | Qualifica |
+------+-------+   +------+-----------+  +-------+-----------+
|  120 |  01   |   |  120 |     2     |  |  01   |     2     |
|  120 |  08   |   |  120 |     1     |  |  08   |     1     |
|  205 |  01   |   |  205 |     1     |  |  01   |     1     |
+------+-------+   +------+-----------+  +-------+-----------+

Ora si possono combinare le prime due tabelle per formare una
tabella avente righe spurie come si e' gia' fatto
precedentemente.
Questa tabella intermedia corrisponde a tutte le qualifiche
che si devono utilizzare nel progetto.
La terza tabella specifica le capacita' usate in ogni progetto.
Quando si combinano le tabelle intermedie con la terza tabella
si eliminano le righe spurie e si ottiene un risultato
identico alla tabella originale.
Le tre tabelle mostrate, che si possono ricombinare per
produrre la relazione originale, sono in quinta forma normale.
Questo vincolo, per cui le proiezioni si possono ricongiungere
validamente, e' detta dipendenza di combinazione.

La dipendenza di combinazione nella tabella originale provoca
un  suo funzionamento anomalo durante l'aggiornamento.
Si consideri la tabella seguente, in cui un impiegato utilizza
la sua qualifica di analista per un progetto e la qualifica di
programmazione su di un altro progetto.

Tabella IMPIEGATI-PROGETTI-QUALIFICHE
+------+----------+-----------+
| Matr | Progetto | Qualifica |
+------+----------+-----------+
|  120 |    01    |     2     |
|  120 |    08    |     1     |
+------+----------+-----------+

Supponiamo di aggiungere alla tabella un nuovo impiegato, che
usa la sua qualifica di programmatore  sul progetto 01

Tabella IMPIEGATI-PROGETTI-QUALIFICHE
+------+----------+-----------+
| Matr | Progetto | Qualifica |
+------+----------+-----------+
|  120 |    01    |     2     |
|  120 |    08    |     1     |
|--205-|----01----|-----1-----|  
+------+----------+-----------+

A prima vista sembrerebbe un'aggiunta valida, ma scomponiamo
la tabella in tre con lo stesso metodo usato prima, otteniamo:

Tabella            Tabella               Tabella 
IMPIEGATI-PROGETTI IMPIEGATI-QUALIFICHE  PROGETTI-QUALIFICHE
+------+-------+   +------+-----------+  +-------+-----------+ 
| Matr | Prog. |   | Matr | Qualifica |  | Prog. | Qualifica |
+------+-------+   +------+-----------+  +-------+-----------+
|  120 |  01   |   |  120 |     2     |  |  01   |     2     |
|  120 |  08   |   |  120 |     1     |  |  08   |     1     |
|  205 |  01   |   |  205 |     1     |  |  01   |     1     |
+------+-------+   +------+-----------+  +-------+-----------+

e ora ricombiniamo le tre tabelle ricreando quella originale:

Tabella IMPIEGATI-PROGETTI-QUALIFICHE
+------+----------+-----------+
| Matr | Progetto | Qualifica |
+------+----------+-----------+
|  120 |    01    |     2     |
|  120 |    08    |     1     |
|--120-|----01----|-----1-----|
|  205 |    01    |     1     |
+------+----------+-----------+

Notate che la tabella ottenuta ha una riga in piu' (quella
evidenziata) rispetto a quella con cui si e' iniziato.
In un primo momento questo risultato puo' sembrare sbagliato,
ma cio' significa che le tre tabelle non sono in quinta forma
normale?
No, significa solo che non e' valido aggiungere una sola riga
ad una tabella che non sia in quinta forma normale.
Aggiungendo una nuova riga alla tabella non in quinta forma
normale, si hanno tre eventi.

- L'impiegato 205 e' stato assegnato al progetto 01 (corretto)
- L'impiegato 205 ha capacita' di programmazione (corretto)
- Il progetto 01 ora usa la qualifica di programmatore (erato)

Analizzando il contenuto della tabella originale insieme con
questi fatti, si vede che quando si aggiunge una nuova riga
per l'impiegato 205, progetto 01 e qualifica 1 (programmatore)
si deve anche aggiungere  una nuova riga per l'impiegato 120,
progetto 01 e qualifica 1.
Questo perche' l'impiegato 120 aveva gia' la qualifica di
programmatore ed era gia' stato assegnato al progetto 01, per
cui la qualifica di programmatore dell'impiegato 120 e' ora
disponibile per il progetto 01.

Usando le tre tabelle separate piuttosto che la tabella
originale si puo' essere sicuri che tutti e tre i fatti sono
riflessi propriamente.
La dipendenza di combinazione che esiste nella tabella singola
non in quinta forma normale, crea vincoli sull'aggiornamento
della tabella.

Se si lascia la tabella in quarta forma normale, qualche volta
si devono aggiungere due righe alla volta invece che una sola.
Ci possono essere problemi simili con la cancella zione.
E' abbastanza difficile stabilire quando si incorrera' in
questo tipo di anomalie.
Sistemando i dati in quinta forma normale, si possono
aggiungere i dati dell'impiegato 205 in modo veloce
semplicemente aggiungendo una nuova riga in ognuna delle tre
tabelle.

La quinta forma normale permette inoltre di aggiungere dati
che non si potrebbero aggiunere a tabelle composte.
per esempio, si puo' mostrare un impiegato che ha una
particolare qualifica, anche se nessun progetto utilizza
quella qualifica, il tutto aggiungendo una sola riga alla
tabella IMPIEGATI-QUALIFICHE.
Questa informazione non puo' essere invece aggiunta alla
tabella composta senza dover inserire valori nulli.

La ricerca sulla teoria della normalizzazione continua, e di
continuo vengono individuate forme di normalizzazione sempre
piu' alte anche se, nella pratica oltre la quinta forma
normale e' assai difficile andare.