giovedì 3 febbraio 2011

Normalizzazione di database



Per eliminare definitivamente la ridondanza dalle relazioni e quindi dal database, si ricorre ad un processo di normalizzazione: si tratta di un procedimento di tipo graduale, che realizza un’ottimizzazione progressiva a partire da relazioni non normalizzate fino a raggiungere un certo livello di normalizzazione.

Questo processo si fonda su un semplice criterio: se una relazione presenta più concetti tra loro indipendenti, la si decompone in relazioni più piccole, una per ogni concetto. Questo tipo di processo non è sempre applicabile in tutte le tabelle, dato che in taluni casi potrebbe comportare una perdita d'informazioni.

Prima di entrare in merito alla normalizzazione è bene introdurre alcuni particolari concetti:

Definizione di ridondanza:

Si ha ridondanza dei dati ogni volta che vengono memorizzati inutilmente dei dati ripetuti.

Esempio:
Si supponga di disporre di una tabella in cui vengono registrati tutti gli acquisti di merci effettuati da un’impresa mercantile.

Acquisti (Cod_fornitore, Nome_fornitore, Codice_fiscale, Merce, Quantità)

In un caso come questo i dati di Fornitore e Codice_ficale vengono ripetuti inutilmente ogni volta che compare la registrazione di un acquisto. Si può ovviare ad una tale problema separando le informazioni ridondanti della tabella acquisti:

Acquisti (Merce, Cod_fornitore, Quantità)
Fornitori (Cod_fornitore, Nome_fornitore, Codice_fiscale)

In questo modo se gli acquisti effettuati da un certo fornitore compaiono mille volte, non dovremo per mille volte ripetere inutilmente l’informazione Nome_fornitore, Codice_fiscale.

Dipendenza funzionale:

Si ha dipendenza funzionale tra un attributo x e una chiave se i valori di x dipendono dai valori assunti dalla chiave, ovvero se si viene a determinare una relazione biunivoca tra i valori di x e i valori della chiave.

Esempio:
Stabiliamo che nella relazione di esempio abbiamo come chiave primaria Nome e Cognome.

ANAGRAFICA (Nome, Cognome, Indirizzo)

È evidente che Indirizzo è dipendente funzionalmente dalla chiave, ciò significa che per ogni persona corrisponde un indirizzo.

Dipendenza funzionale transitiva:

Si verifica una dipendenza funzionale transitiva quando un attributo J appartenente alla relazione r dipende da un attributo K della relazione che non è chiave candidata e che a sua volta dipende da un attributo A, che è chiave candidata o primaria.

Data la relazione: r (A, B, K, J) con A chiave primaria o candidata e avendo che: (il simbolo -> significa : ” determina il valore di:”): A -> K e K -> J si verifica una dipendenza transitiva tra A e J , in quanto J dipende da A tramite K.

Esempio:
Nella seguente relazione possiamo renderci conto come il valore di Collocazione dipenda da Genere e come il valore di Genere dipenda da Identificativo_videocassetta:

VIDEOCASSETTE (Identificativo_videocassetta, Genere, Collocazione)

Identificativo_videocassetta è la chiave primaria, essa identificando la videocassetta determina il Genere; le videocassette vengono collocate raggruppandole per genere.

Prima forma normale:

Una relazione si dice in prima forma normale (1NF) se e solo se tutti i suoi attributi sono valori atomici.
Ciò implica che né gli attributi, né i valori da questi assunti possono essere scomposti ulteriormente.

La relazione che segue non è in prima forma normale:

NOME

INDIRIZZO

----------------------------------------

--------------------------

Rossi & C. s.p.a

Via Verdi, 5 Roma

Martini s.n.c.

Via Centrale, 4 Milano

Paoli s.a.s.

P.za Libertà, 12 Pisa

...................................

...................................

in quanto l’attributo INDIRIZZO non è atomico: può essere suddiviso in Indirizzo e Città. La relazione si normalizza trasformandola in:

NOME

INDIRIZZO

CITTA'

-----------------------------

--------------------------

-----------

Rossi & C. s.p.a

Via Verdi, 5

Roma

Martini s.n.c.

Via Centrale, 4

Milano

Paoli s.a.s.

P.za Libertà, 12

Pisa

...................................

...................................

............

Seconda forma normale:

Una relazione è in seconda forma normale se e solo se soddisfa la 1NF e inoltre ciascun attributo che non fa parte della chiave è indipendente funzionalmente da una qualunque chiave candidata.

Per normalizzare la relazione è necessario estrarre la dipendenza funzionale riscontrata tra un sottoinsieme della chiave e l’attributo in questione, che darà luogo ad un’altra relazione.

Se applichiamo quanto detto alla relazione r (A, B, C, V, Z) con ABC chiave primaria, V dipende funzionale da ABC e Z dipende funzionale da AB, per normalizzare la relazione dobbiamo realizzare due nuove relazioni come segue:

r’ (A, B, C, V) e r’’ (A, B, Z)

Esempio:
Abbiamo una relazione che rappresenta delle scrivanie da ufficio prodotte da una azienda industriale, la chiave primaria è data Tipo_tavolo e Tipo_legno.

Tipo_tavolo

Tipo_ legno

Tipo_finitura

------------------------

-----------------------

-------------------------

Manager

Mogano

Ottone

Manager

Ciliegio

Acciaio inox

Montecarlo

Noce

Sughero

Montecarlo

Mogano

Ottone

Top

Noce

Sughero

Tipo_finitura è dipendente funzionalmente da un sottoinsieme della chiave primaria, ovvero da Tipo_legno, dunque la tabella non è in 2NF.
È possibile normalizzare la relazione trasformandola in:

Tipo_tavolo

Tipo_legno

----------------------------------------

-----------------------------

Manager

Mogano

Manager

Ciliegio

Montecarlo

Noce

Montecarlo

Mogano

Top

Noce

Tipo_legno

Tipo_finitura

------------------------------

---------------------------------------

Mogano

Ottone

Ciliegio

Acciaio inox

Noce

Sughero

Terza forma normale:

La terza forma normale ha come scopo l’eliminazione dalla relazione delle dipendenze funzionali transitive.

Una relazione è in terza forma normale (3NF) se, oltre ad essere in 2NF, ciascun attributo che non partecipa alla chiave non è transitivamente dipendente da una qualunque chiave candidata.


Nessun commento:

Posta un commento