Powered By Blogger

8 ottobre 2008

Normalizzazione del database


La normalizzazione è un procedimento volto all'eliminazione della ridondanza e del rischio di inconsistenza dal database. Esistono vari livelli di normalizzazione (forme normali) che certificano la qualità dello schema del database.

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 è, purtroppo, sempre applicabile in tutte le tabelle, dato che in alcuni casi potrebbe comportare una perdita d'informazioni.

Alcuni concetti importanti riguardanti la normalizzazione:

Ridondanze --> Caratteristica di ciò che è ridondante. Aggiunta di parole non necessarie alla comprensione di una frase.

Anomalie --> si verificano quando ci sono irregolarità di dati.

La dipendenza funzionale--> è un particolare vincolo di integrità per il modello relazionale che descrive legami di tipo funzionale tra gli attributi di una relazione. Quando un attributo a determina un altro attributo b, cioè quando il valore di un attributo è unico, cioè sempre lo stesso ogni volta che compare in una tupla l'attributo da cui dipende, possiamo dire che esiste una dipendenza funzionale tra a e b. In maniera più precisa possiamo dire che, per ogni elemento del dominio del primo attributo che compare nella relazione, esiste una funzione che associa ad esso un unico elemento del dominio del secondo attributo.

Decomposizione di una relazione--> una decomposizione dovrebbe sempre soddisfare due proprietà:
-la decomposizione senza perdita, che garantisce la ricostruzione delle informazioni originarie
-la conservazione delle dipendenze, che garantisce il mantenimento dei vincoli di integrità originari.

Per "decomposizione senza perdita" si intende l'atto della manipolazione di una relazione R volta ad ottenere (eventualmente) due o più relazioni (ad esempio R1 e R2) che oltre a conservare le dipendenze funzionali verificano anche la seguente condizione: R = R1joinR2

Teorema: Sia data una relazione R(X), con X insieme degli attributi di R, e due sottoinsiemi A, B di X tali che A unito B coincide con X; siano inoltre R1 e R2 due relazioni rispettivamente su A e su B. Allora è condizione sufficiente affinché la decomposizione su A e B sia senza perdita se, detto C l'insieme intersezione tra A e B, è superchiave per R1(A) o R2(B).


Forme Normali

Prima Forma Normale
Definizione: Si dice che una base dati è in 1NF (prima forma normale) se vale la seguente relazione per ogni relazione contenuta nella base dati: una relazione è in 1NF se e solo se:
-non presenta gruppi di attributi che si ripetono (ossia ciascun attributo è definito su un dominio con valori atomici).
-esiste una chiave primaria (ossia esiste un insieme di attributi, che identifica in modo univoco ogni tupla della relazione)

Seconda Forma Normale
Definizione: Una base dati è invece in 2NF (seconda forma normale) quando è in 1NF e per ogni tabella tutti i campi non chiave dipendono funzionalmente dall'intera chiave primaria e non da una parte di essa.

Come esempio supponiamo di avere una tabella con gli esami sostenuti dagli studenti universitari. I campi di interesse potrebbero quindi essere i seguenti:

"Codice corso di laurea"
"Codice esame"
"Matricola studente"
"Voto conseguito"
"Data superamento"
La tabella avrà quindi la seguente intestazione

id_corso_laurea id_esame id_studente voto data

La superchiave è rappresentata dalla tripla evidenziata, ossia da:

"Codice corso di laurea"
"Codice esame"
"Matricola studente"
Essa infatti risulta essere l'insieme di chiavi minimale per poter identificare in modo univoco le tuple (i record) della tabella.

I campi "Voto conseguito" e "Data superamento", invece, sono campi non chiave, e fanno riferimento all'intera superchiave.


Terza Forma Normale
Definizione: Una base dati è in 3NF (terza forma normale) se è in 2NF e per ogni dipendenza funzionale è vera una delle seguenti condizioni:

X è una superchiave della relazione
Y è membro di una chiave della relazione
Teorema: Ogni relazione può essere portata in 3NF.


Forma Normale di Boyce e Codd
Definizione: Una relazione R è in forma normale di Boyce e Codd (BCNF) se e solo se per ogni dipendenza funzionale (non banale) , X è una superchiave per R.

Dato un insieme di relazioni, non è possibile garantire sempre il raggiungimento della BCNF; in particolare il mancato raggiungimento di questo obiettivo è indice che la base dati è affetta da un'anomalia di cancellazione (ossia è possibile perdere dati a seguito di un'operazione di cancellazione).

Es: Facciamo un esempio molto banale, se abbiamo uno schema relazionale
Mettiamolo in forma canonica.

Calcoliamo le chiavi: A, B e C non stanno a destra di nessuna dipendenza, quindi appartengono a tutte le chiavi.
La chiusura di ABC è ABCDE quindi ABC è una chiave.
Ora, visto che una chiave è una superchiave minimale (ovvero una superchiave con tutti attributi essenziali per derivare ogni attributo del sistema) lo schema relazionale è in BCNF


Quarta Forma Normale
Una base dati è detta invece essere in 4NF quando per ogni relazione di dipendenza funzionale molti a molti X Y, X sia una superchiave.


Quinta Forma Normale
Infine, una base dati si dice in 5NF se e solo se:
è in 4NF;
ogni relazione di dipendenza è implicata dalle chiavi candidate.


Limiti di 4NF e 5NF

La quarta e quinta forma normale, in realtà, raramente vengono utilizzate, in quanto ad un incremento di rigore nell'eliminazione della ridondanza corrisponde un degrado delle prestazioni (query di selezione o, peggio, modifica dei dati, richiedono molto più tempo per l'esecuzione).