esempio di normalizzazione
DESCRIPTION
esempio di normalizzazioneTRANSCRIPT
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 campiLa 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 parzialiDipendenza 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 transitiveDipendenza 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, CustomerAddClerkNoClerkName
I loro determinanti CustomerNo e ClerkNo non fanno parte della chiave primaria, nè sono chiave
Creiamo le due nuove tabelleCLIENTE(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)
LE TABELLE NORMALIZZATE
FATTURA(SalesOrderNo, Date, CustomerNo, ClerkNo)
ORDINE(SalesOrderNo, ItemNo, Qty, UnitPrice)
ITEM(ItemNo, Description)
CLIENTE(CustomerNo, CustomerName, CustomerAdd)
IMPIEGATO(ClerkNo, ClerkName)
LO SCHEMA CONCETTUALE