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.