NORMALIZZAZIONE ESERCIZI
INTRODUZIONE La modellazione E-R ci ha consentito di descrivere schemi relazionali Lo strumento base per la modellizzazione è stato finora “la ragionevolezza” Esistono però metodi formali ( NORMALIZZAZIONE ) per assicurare la scelta di “buoni” schemi relazionali.
3 Linee guida informali Ridurre la ridondanza: Ha un duplice scopo: ridurre la “storage area” e evitare le anomalie da aggiornamento Anomalie da aggiornamento: 1. Anomalie da inserimento 2. Anomalie da modifica 3. Anomalie da cancellazione
4 Linee guida informali Ridurre il numero di valori null nelle tuple: Valori null possono essere variamente interpretati: non applicabile, sconosciuto, non inserito In molti casi conviene creare nuove relazioni per ridurre i null. Esempio: Se solo il 5% degli impiegati ha un fax personale avremo il 95% di null. NomeCognomeSuperio_idId_dipData_nindirizzoCFStip_annuo Impiegato_fax Tel.Fax. NomeCognomeSuperio_idId_dipData_nindirizzoCFStip_annuo Impiegato Tel. Fax.Id_dip Fax_imp
5 Normalizzazione Procedura che permette di trasformare schemi non normalizzati in schemi che soddisfano una forma normale (i.e., normalizzati) La normalizzazione va utilizzata come tecnica di verifica dei risultati della progettazione di una base di dati Non costituisce una metodologia di progettazione
DIPENDENZA FUNZIONALE (DF) o... (…) Un concetto importante per applicare le regole della normalizzazione è la
Definizione generale Dato uno schema R(T) e due sottoinsiemi di attributi non vuoti X e Y di T, diremo che esiste sullo schema R(T) una DIPENDENZA FUNZIONALE (df) (o in Inglese FD cioè FUNCTIONAL DEPENDENCY) tra X e Y se, in ogni istanza di R per ogni coppia di tuple t1 e t2 aventi gli stessi valori sugli attributi in X, risulta che t1 e t2 hanno gli stessi valori anche sugli attributi in Y
Cioè… X Y X determina funzionalmente Y Y dipende funzionalmente da X se non è possibile che esistano due tuple con valori uguali in corrispondenza degli attributi di X e uno o più valori diversi in corrispondenza degli attributi di Y. Quindi per ogni coppia di tuple u e v tali che u[X]=v[X], deve essere u[Y]=v[Y]
Esempio : Una dipendenza funzionale è un vincolo che descrive legami di tipo funzionale tra gli attributi di una relazione. Il valore dell’attributo Impiegato determina il valore dell’attributo stipendio: esiste una funzione che associa ad ogni elemento del dominio dell’attributo Impiegato un solo elemento del dominio dell’attributo Stipendio. (Vale lo stesso per Progetto e Bilancio).
Quali dipendenze funzionali riuscite ad individuare nel seguente esempio? ORDINE (num, fornitore, indirizzo, articolo, quantità, data) num fornitore un certo ordine si riferisce sempre allo stesso fornitore fornitore indirizzo un fornitore ha sempre lo stesso indirizzo num data un ordine viene inviato in una certa data num fornitore, indirizzo, data num, articolo quantità in un certo ordine, un certo articolo viene ordinato in una determinata quantità (non ci possono essere due righe con la stessa coppia di valori per num e articolo e valori diversi per quantità)
Altro esempio IMPIEGATO (codimp, nome, stipendio, progetto, data_finale)
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: 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.
N.B: La chiave K di una relazione ha sicuramente una relazione funzionale con qualsiasi altro attributo della relazione: il vincolo di dipendenza funzionale generalizza il vincolo di chiave.
Riepilogo sulle prime tre forme normali 1.UNA RELAZIONE SI DICE CHE È IN PRIMA FORMA NORMALE - 1ST NORMAL FORM (1NF) – SE OGNI SUO DOMINIO È SEMPLICE (ATOMICO). Ricorda: Un campo non atomico può essere composto (o strutturato) o multiplo (multivalore): (Se una tabella si trova nella prima forma normale, non c’è alcuna possibilità di suddividere ulteriormente i campi della tabella) 1 Forma Normale
Esempio 1 NON È IN 1FN DEVO MODIFICARLA. UN PRIMO TENTATIVO POTREBBE ESSERE:
18 2 Forma Normale Uno schema R è in questa forma se è in 1NF e ogni attributo non primo ha una FD piena dalla PK di R …cioè?? Una relazione è in seconda forma normale se e solo se soddisfa la 1NF e inoltre ciascun attributo che non fa parte della chiave primaria ha una dipendenza funzionale da tutta la chiave primaria (e non solo da una parte di essa bisogna esaminare le relazioni in cui la chiave primaria è composta)
Riprendiamo l’esempio precedente I campi “nome”, “cognome”, “via”, “cap”, “città” dipendono solo da una parte della chiave (#MATRICOLA). Quindi creo due relazioni:
relazione in 3ª f.n.: se è in 2ª f.n. e se ogni suo attributo non chiave primaria non dipende transitivamente dalla chiave… cioè… 3 Forma Normale
Esempio: Tabella STUDENTI: (#MATRICOLA, nome, cognome, via, cap, città, #isee, tassa) Con #isee si intende il codice dello scaglione di reddito che determina la tassa scolastica. Tabella STUDENTI: (#MATRICOLA, nome, cognome, via, cap, città, #isee) Tabella TASSA: (#ISEE, tassa) Non è in terza forma normale perché…. Per portarla in 3FN devo…