silvanonatalizi
4,854 views
12 slides
Nov 23, 2009
Slide 1 of 12
1
2
3
4
5
6
7
8
9
10
11
12
About This Presentation
esempio di normalizzazione
Size: 140.34 KB
Language: it
Added: Nov 23, 2009
Slides: 12 pages
Slide Content
Esempio di
normalizzazione
Lezione per la classe VAL novembre 2009
Problema da risolvere:
memorizzazione di fatture
Metodo di soluzione
Iniziare con una lista dei campi che devono
apparire nel database
Pensa a questi campi come se appartenessero ad
un’unica tabella
Non includere i campi derivati (calcolati)
Otteniamo questa informazione dalla stampa di un
documento del quale si vogliono memorizzare i
dati.
La lista dei campi del nostro
esempio: fatture
SalesOrderNo, Date,
CustomerNo,
CustomerName,
CustomerAdd,
ClerkNo, ClerkName,
ItemNo, Description,
Qty, UnitPrice
Prima forma normale
Separa dalla tabella principale i gruppi di campi
che si ripetono (altrimenti avremmo delle celle
della tabella con più valori)
Crea una nuova tabella con questi gruppi di campi
La chiave primaria della nuova tabella è sempre
una chiave composta: di solito tra il numero del
documento e un campo che identifica
univocamente la linea che si ripete, come item
number
Prima forma normale del nostro
esempio
La nuova tabella è:
ORDINE(SalesOrderNo, ItemNo, Description, Qty,
UnitPrice)
I campi che si ripetono sono rimossi dalla tabella principale
che si riduce a:
FATTURA(SalesOrderNo, Date, CustomerNo,
CustomerName, CustomerAdd, ClerkNo,
ClerkName)
abbiamo normalizzato nella 1nf
Seconda forma normale
Occorre rimuovere le dipendenze parziali
Dipendenza funzionale il valore di un attributo di
una tabella è determinato univocamente dal valore
di un altro attributo.
Dipendenza parziale è una dipendenza
funzionale dove un attributo dipende solo da una
parte di una chiave primaria (la chiave primaria
deve essere composta)
Crea delle tabelle separate con i dati
funzionalmente dipendenti ed i loro determinanti
Seconda forma normale nel
nostro esempio
Nella tabella ORDINE(SalesOrderNo, ItemNo,
Description, Qty, UnitPrice) c’è la dipendenza
parziale ItemNo, Description
Tutti questi campi ad eccezione della chiave
primaria saranno rimossi dalla tabella originale. La
chiave primaria è lasciata come chiave esterna per
collegare le tabelle.
Pertanto la tabella ORDINE si spezza in
ITEM(ItemNo, Description) e
ORDINE(SalesOrderNo, ItemNo, Qty, UnitPrice)
Terza forma normale
Rimuove le dipendenze transitive
Dipendenza transitiva è un tipo di dipendenza
funzionale, laddove un attributo dipende da un
altro attributo che non è, né fa parte della chiave
primaria. Pertanto il suo valore è solo
indirettamente determinato dalla chiave primaria
Crea una tabella separata per questa dipendenza
funzionale. Lascia una copia del determinante
nella tabella originale come chiave esterna
Terza forma normale per il
nostro esempio
FATTURA(SalesOrderNo, Date, CustomerNo,
CustomerName, CustomerAdd, ClerkNo, ClerkName)
Abbiamo due dipendenze funzionali:
CustomerNoCustomerName, CustomerAdd
ClerkNoClerkName
I loro determinanti CustomerNo e ClerkNo non fanno parte
della chiave primaria, nè sono chiave
Creiamo le due nuove tabelle
CLIENTE(CustomerNo, CustomerName, CustomerAdd)
IMPIEGATO(ClerkNo, ClerkName)
Tutti questi campi ad eccezione delle loro chiavi primarie
sono rimossi dalla tabella FATTURA:
FATTURA(SalesOrderNo, Date, CustomerNo, ClerkNo)