Corso Database
Un dispensa di informatica sul database e sul DBMS (Database Management System)

da | 18 Gen 2006 | Informatica | 2 commenti

Normalizzazione dei 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.

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.

2 Commenti

  1. nico96

    ottima spiegazione

    Rispondi
    • giack

      spiegazione molto chiara e utile.
      ottimi esempi molto comprensibili che aiutano a comprendere meglio.
      grazie

      Rispondi

Invia un commento

Il tuo indirizzo email non sarà pubblicato.

Share This