La normalizzazione delle relazioni
Cosa significa normalizzare una relazione La tabella Inventario contiene informazioni su merci esistenti in diversi magazzini. La tabella NON è bene organizzata Prodotto Magazzino Quantità IndirizzoMagazzino 545 CA1 800 Via Tonale 12 PA2 700 Via Mazzini 25 VE1 356 Calle Corta 5 100 245 200 230 PA1 370 Via Garibaldi 38 350 720
Problema da risolvere La tabella Inventario non è bene organizzata perché l’indirizzo del magazzino è ripetuto più volte. La ridondanza va evitata, non solo per lo spreco di spazio di memoria, ma soprattutto per le anomalie che si possono presentare nel trattamento dei dati
Anomalie per la ridondanza Anomalia di aggiornamento: se si aggiorna l’indirizzo di un magazzino, si devono aggiornare tutte le righe Anomalia di cancellazione: se si svuota il magazzino si perde l’indirizzo Anomalia di inserimento: all’apertura di un magazzino, mancando merci, non si ha l’indirizzo
Risolvere il problema Per evitare la ridondanza, sostituiamo la tabella Inventario con una coppia di tabelle Inventario(Prodotto, Magazzino, Quantità) Negozi(CodiceMagazzino, IndirizzoMagazzino) La chiave di Inventario è costituita da gli attributi Prodotto e Magazzino. La scomposizione non provoca perdita di informazioni
La normalizzazione Sono stati definiti dei criteri per evitare la ridondanza dei dati e le possibili anomalie Tali criteri prendono il nome di forme normali e devono essere soddisfatti dalle tabelle. Il processo di trasformazione delle tabelle prende il nome di normalizzazione. La normalizzazione completa il processo di progettazione di un database relazionale
Termini da conoscere per normalizzare una tabella Chiave candidata: è un attributo o un insieme di attributi che identifica in modo univoco una n-upla Chiave o chiave primaria: è la chiave candidata scelta dal progettista Chiave alternativa: è una chiave candidata non scelta come chiave primaria Attributo non-chiave: è un attributo che non fa parte della chiave
Esempio Consideriamo la tabella Inventario a cui è stato aggiunto l’attributo NumeroInventario che identifica univocamente ogni riga Inventario(NumeroInventario, Prodotto, Magazzino, Quantità, IndirizzoMagazzino) Numero Inventario Prodotto Magazzino Quantità IndirizzoMagazzino 00021 545 CA1 800 Via Tonale 12 00035 PA2 700 Via Mazzini 25 00042 VE1 356 Calle Corta 5 00124 100 245 00135 200 230 00136 PA1 370 Via Garibaldi 38 00138 350 00140 720
Esempio (continua) NumeroInventario è una chiave candidata Prodotto non è chiave candidata e nemmeno Magazzino L’insieme {Prodotto, Magazzino} è una chiave candidata L’insieme {Prodotto, Magazzino, Quantità} non è una chiave candidata perché contiene {Prodotto, Magazzino} che è chiave candidata Se il progettista sceglie NumeroInventario allora {Prodotto, Magazzino} è una chiave alternativa
Dipendenza funzionale Si ha una dipendenza funzionale tra attributi quando il valore di un insieme di attributi A determina un singolo valore dell’attributo B e si indica con A B. Si dice anche che B dipende funzionalmente da A, o che A è un determinante per B. Se un attributo è chiave candidata di una relazione, allora è un determinante per ogni attributo per la relazione e, viceversa, un attributo che sia determinante per ogni attributo di una relazione è chiave candidata per la stessa.
Esempio Nel caso della relazione Inventario NumeroInventario (Prodotto, Magazzino, Quantità, IndirizzoMagazzino) {Prodotto, Magazzino} (NumeroInventario, Quantità, IndirizzoMagazzino) Magazzino IndirizzoMagazzino Nei primi due casi la dipendenza funzionale è dovuta al fatto che NumeroInventario e {Prodotto, Magazzino} sono chiavi candidate, nel terzo caso Magazzino è determinante per IndirizzoMagazzino senza che sia chiave.
Dipendenza funzionale transitiva Si ha dipendenza funzionale transitiva tra attributi quando un attributo A determina B e B determina C; si dice allora che C dipende transitivamente da A Se AB e BC, allora AC transitivamente
Prima forma normale (1FN) Una relazione è in prima forma normale (1FN) quando rispetta i requisiti fondamentali del modello relazionale che, come abbiamo visto, sono: tutte le righe della tabella hanno lo stesso numero di colonne gli attributi rappresentano informazioni elementari i valori di una colonna sono dello stesso tipo ogni riga è diversa da tutte le altre l’ordine delle righe non è rilevante
Esempio 1FN Dipendenti(Matricola, Cognome, Nome, Città, FamiliariACarico) L’attributo familiari a carico non è elementare. La relazione NON è in 1FN La relazione può essere convertita in Dipendenti(Matricola, Cognome, Nome, Città) Familiari(CodiceFam, CognomeFam, NomeFam, MatricolaDip)
Esempio 1FN (continua) Dipendenti Matricola Cognome Nome Città FamiliariACarico 12001 Rossi Antonio Roma Rossi Alice Rossi Marco Verdi Maria 14007 18009 Dipendenti Familiari CodiceFam CognomeFam NomeFam MatricolaDip 50001 Rossi Alice 12001 50002 Marco 50003 Verdi Maria Matricola Cognome Nome Città 12001 Rossi Antonio Roma 14007 18009
Altre forme normali Le forme normali superiori alla prima vengono introdotte per eliminare problemi durante le operazioni di aggiornamento e di cancellazione, evitando l’inconsistenza o la perdita indesiderata di dati
Seconda forma normale (2FN) Una relazione è in seconda forma normale (2FN) quando è in prima forma normale e tutti i suoi attributi non-chiave dipendono dall’intera chiave, cioè non possiede attributi che dipendono soltanto da una parte della chiave. La 2FN elimina la dipendenza parziale degli attributi dalla chiave e riguarda il caso di relazioni con chiave composte, cioè formate da più attributi.
Esempio 2FN Consideriamo la tabella Inventario iniziale Inventario(Prodotto, Magazzino, Quantità, IndirizzoMagazzino) Non è in 2FN in quanto IndirizzoMagazzino dipende solo da Magazzino che è una parte della chiave. MagazzinoIndirizzoMagazzino La scomposizione inizia prendendo tutti gli attributi presenti nella dipendenza funzionale e costruendo una nuova relazione con il determinante come chiave R1(Magazzino, IndirizzoMagazzino) Il passo successivo consiste nel costruire una seconda relazione R2 che comprende gli attributi dello schema di partenza privati degli attributi che dipendono parzialmente dalla chiave. R2(Prodotto, Magazzino, Quantità)
Esempio 2FN (continua) Prodotto Magazzino Quantità 545 CA1 800 PA2 700 VE1 356 100 245 200 230 PA1 370 350 720 Magazzino IndirizzoMagazzino CA1 Via Tonale 12 PA2 Via Mazzini 25 VE1 Calle Corta 5 PA1 Via Garibaldi 38
Algoritmo di scomposizione di una relazione T Si identificano tutte le dipendenze funzionali e le chiavi candidate in T Se una dipendenza funzionale viola le regole di normalizzazione: Si costruisce una nuova relazione con tutti gli attributi della dipendenza funzionale considerata Il determinante della dipendenza funzionale è la chiave primaria della tabella definita in a) Si costruisce una nuova relazione rimuovendo da T tutti gli attributi della dipendenza funzionale Si ripete il passo 2 finché non ci sono più dipendenze funzionali che violano le regole di normalizzazione.
Terza forma normale (3FN) Una relazione è in terza forma normale (3FN) quando è in seconda forma normale e tutti gli attributi non-chiave dipendono direttamente dalla chiave, cioè non possiede attributi non-chiave che dipendono da altri attributi non-chiave. La 3FN elimina la dipendenza transitiva degli attributi dalla chiave
Esempio 3FN Studenti(Cognome, Scuola, TelefonoScuola) Cognome(Scuola, TelefonoScuola) ScuolaTelefonoScuola Cognome Scuola TelefonoScuola Bianchi ITC Paleari 02-2538469 Leoni Liceo Dante 06-3845287 Galli ITIS Leonardo 01-123456 Negri Rossi Lorenzini ITIS Galvani 081-543215 Verdi Bedoni Liceo Fermi 06-456987
Esempio 3FN (continua) Istituti(Scuola, TelefonoScuola) Studenti(Cognome, Scuola) Studenti Istituti Cognome Scuola Bianchi ITC Paleari Leoni Liceo Dante Galli ITIS Leonardo Negri Rossi Lorenzini ITIS Galvani Verdi Bedoni Liceo Fermi Scuola TelefonoScuola ITC Paleari 02-2538469 Liceo Dante 06-3845287 ITIS Leonardo 01-123456 ITIS Galvani 081-543215 Liceo Fermi 06-456987