Il 0% ha trovato utile questo documento (0 voti)
67 visualizzazioni37 pagine

Normalizzazione

Il documento descrive i concetti di normalizzazione di un database. La normalizzazione ha lo scopo di rimuovere la ridondanza dei dati decomponendo le tabelle in tabelle più piccole. Vengono introdotte le prime tre forme normali, che si basano sul concetto di dipendenza funzionale, e viene spiegato come trasformare una tabella per renderla conforme a ciascuna forma normale.

Caricato da

Lorenzo Amoretti
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
67 visualizzazioni37 pagine

Normalizzazione

Il documento descrive i concetti di normalizzazione di un database. La normalizzazione ha lo scopo di rimuovere la ridondanza dei dati decomponendo le tabelle in tabelle più piccole. Vengono introdotte le prime tre forme normali, che si basano sul concetto di dipendenza funzionale, e viene spiegato come trasformare una tabella per renderla conforme a ciascuna forma normale.

Caricato da

Lorenzo Amoretti
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 37

DATABASE

NORMALIZZAZIONE
TRATTO DA CAMAGNI-NIKOLASSY, CORSO DI INFORMATICA, VOL 2, HOEPLI

Informatica
La Normalizzazione
La Normalizzazione

 L’obiettivo della normalizzazione è quello di scomporre le


tabelle in tabelle più piccole in modo da avere relazioni
più strutturate e ridurre al minimo la ridondanza dei dati
DB non normalizzato
 Un database non normalizzato presenta problemi di :
 Ridondanza

 Inefficienza

 Complessità

 Perdita di informazioni
Esempio
 Consideriamo la tabella che contiene i dati dei dipendenti di
un’istituzione scolastica
Forma normale
 Le ultime tre anomalie sono dette di aggiornamento

 La normalizzazione si basa sul concetto di forma


normale
 Una relazione (tabella) è in una particolare forma
normale se soddisfa un certo insieme di vincoli
 Le forme normali sono cinque, noi ne studieremo tre.
Dipendenze funzionali
 Il concetto di dipendenza funzionale è alla base
delle prime tre forme normali
 Consideriamo il seguente esempio
Dipendenza funzionale
 I valori contenuti nelle colonne Cognome, Nome, Indirizzo e
Telefono sono associati ad un solo valore della colonna ID_Anag
 Si dice che Cognome, Nome, Indirizzo e Telefono sono
funzionalmente dipendenti dalla colonna ID_Anag che prende il
nome di determinante per tali colonne

 Lo stesso non vale per le colonne Località e CAP, in quanto a valori


diversi della colonna ID_Anag corrispondono valori ripetuti nelle
colonne Località e CAP
Dipendenza funzionale
 In definitiva nel caso della tabella, le dipendenze
funzionali sono:
Dipendenza funzionale
 Quindi dire che la colonna Y è funzionalmente
dipendente da X è come dire che i valori della
colonna X identificano i valori della colonna Y
 Se la colonna X è una chiave primaria, allora tutte
le colonne nella tabella R devono essere
funzionalmente dipendenti da X.
Normalizzazione
 La normalizzazione è un processo che serve a
rimuovere i dati ridondanti dalle tabelle
decomponendole in tabelle più piccole
 Lo scopo è quello di avere solo chiavi primarie a
sinistra delle colonne dipendenti funzionalmente
Prima forma normale (1FN)

 Esempio: la seguente tabella non è in 1FN

 Generalità è un campo composto, bisogna scomporre tale


attributo in due campi:
Prima forma normale (1FN)
 Ulteriore esempio

1FN
Scomposizione Indirizzo
Seconda forma normale (2FN)

 Per identificare univocamente la quantità di un certo prodotto fornita da un


dato fornitore si una la chiave primaria composta ID_Fornitore+ID_Articolo
Seconda forma normale (2FN)

 La Tabella1 è in 1FN, però contiene dati ridondanti


 Città e Stato sono ripetute per ogni articolo
Seconda forma normale (2FN)
 La ridondanza provoca anomalie di aggiornamento
Seconda forma normale (2FN)

 La Tabella1 è in 1FN ma non in 2FN perché le colonne Stato e Città


sono funzionalmente dipendenti solo dalla colonna ID_Fornitore
della chiave primaria composta (ID_Fornitore+ID_Articolo)
 Le dipendenze funzionali nella Tabella1 sono:
Seconda forma normale (2FN)
 Una Tabella può essere trasformata da 1FN a 2FN seguendo i
seguenti passi:
Esempio 2FN
 La tabella1 trasformata in 2FN diventa:
Esempio2 – 2FN
 Database scuola con chiave primaria composta da
Matricola+CadiceMateria
Esempio3 – 2FN
Osservazione su 2FN

 OSS.: Presupposto per verificare se il DB è in 2FN è che sia


presente una chiave primaria composta
Terza forma normale (3FN)
Terza forma normale (3FN)
 Riprendiamo l’esempio precedente (Fornitori)

 Le tabelle in 2FN contengono ancora anomalie di aggiornamento


Terza forma normale (3FN)
 La Tabella1 è già in 3FN, perché la colonna non
chiave Qtà è completamente dipendente dalla
chiave primaria (ID_Articolo+ID_Fornitore)
 La tabella Fornitori è in 2FN, ma non in 3FN perché
la colonna Stato non dipende dalla chiave
ID_Fornitore, ma dalla colonna Città
 È predente una dipendenza transitiva
Dipendenza transitiva

 Nel caso dell’esempio precedente si ha:


Terza forma normale (3FN)
 La procedura per trasformare una tabella in 3FN è:
Esempio1 – 3FN
 La tabella Fornitori trasformata in 3FN diventa:

3FN
Esempio2 – 3FN

3FN
Vantaggi 3FN
In conclusione

 Precondizione: presenza di una chiave primaria composta


Esempio
 Problema: definire la struttura dati di un archivio
che deve memorizzare le fatture commerciali
 Ipotizziamo di realizzare un’unica tabella con i
seguenti campi:
 NrFattura, Data, CodiceCli, RagioneSociale, Indirizzo,
ID_Agente, NomeAgente, NrItem, Descrizione, Quantità,
PrezzoUnitario
 NB: gli ultimi quattro sono ripetuti più volte
Esempio, 1FN
 Separiamo ora dalla tabella principale i gruppi di campi che si
ripetono, altrimenti avremo delle celle della tabella con più valori,
e quindi non in 1FN
 Creiamo una nuova tabella RigheFatt, le cui righe costituiscono le
righe della fattura

Fatture(NrFattura(pk), Data(pk), CodiceCli, RagioneSociale, Indirizzo, ID_Agente,


NomeAgente, NrItem(pk), Descrizione, Quantità, PrezzoUnitario)
1FN

RigheFatt(NumeroFat(pk)(fk), Data(pk) (fk), NrItem(pk), Descrizione, Quantità,


PrezzoUnitario)
Fatture(NrFattura(pk), Data(pk), CodiceCli, RagioneSociale, Indirizzo, ID_Agente,
NomeAgente)
Esempio, 2FN
 Occorre rimuovere le dipendenze parziali
 Creiamo delle tabelle separate con i dati funzionalmente
dipendenti e i loro determinanti
Fatture(NrFattura(pk), Data(pk), CodiceCli, RagioneSociale, Indirizzo, ID_Agente,
NomeAgente)
RigheFatt(NumeroFat(pk)(fk), Data(pk) (fk), NrItem(pk), Descrizione, Quantità,
PrezzoUnitario)
2FN

RigheFatt(NumeroFat(pk)(fk), Data(pk) (fk), NrItem(pk), Quantità,


PrezzoUnitario)
ITEM(NrItem(pk)(fk), Descrizione)
Fatture(NrFattura(pk), Data(pk), CodiceCli, RagioneSociale, Indirizzo, ID_Agente,
NomeAgente)
Esempio, 3FN
 Rimuoviamo ora le dipendenze transitive e creiamo una tabella
separata per ogni dipendenza funzionale

RigheFatt(NumeroFat(pk)(fk), Data(pk) (fk), NrItem(pk), Quantità,


PrezzoUnitario)
ITEM(NrItem(pk)(fk), Descrizione)
Fatture(NrFattura(pk), Data(pk), CodiceCli, RagioneSociale, Indirizzo, ID_Agente,
NomeAgente)
3FN

RigheFatt(NumeroFat(pk)(fk), Data(pk) (fk), NrItem(pk), Quantità,


PrezzoUnitario)
ITEM(NrItem(pk)(fk), Descrizione)
Fatture(NrFattura(pk), Data(pk), CodiceCli, ID_Agente)
Clienti(CodiceCli(pk), RagioneSociale, Indirizzo)
Agenti(ID_Agente(pk), NomeAgente)
Esercizi

Potrebbero piacerti anche