NORMALIZZAZIONE DI SCHEMI RELAZIONALI
Transcript
NORMALIZZAZIONE DI SCHEMI RELAZIONALI
NORMALIZZAZIONE DI SCHEMI RELAZIONALI Prof.ssa Rosalba Giugno PROBLEMA GENERALE • La progettazione concettuale e logica produce uno schema relazionale che rappresenta la realta’ dei dati nella nostra applicazione. • E’ importante che questo schema abbia alcune importanti proprieta’. Studieremo queste proprieta’ e daremo degli algoritmi per produrre schemi buoni. Anche se spesso accade che la progettazione logica da noi descritta produce schemi gia’ normalizzati. In ogni caso potremo usare queste tecniche per verificare le proprieta’. RIDONDANZE Il telefono e’ripetuto per ogni esame (ridondanza) Matricola Nome Telefono Corso Voto IL Nome ed il Telefono sono funzione solo della Matricola e non dipendono dagli esami. Quindi non vanno associati ad ogni esame Viceversa gli esami hanno bisogno solo della matricola. ANOMALIE • Se il telefono dello studente cambia allora esso deve essere aggiornato in tutti i record dello studente (anomalia di aggiornamento) • Se vengono annullati gli esami dati non rimane traccia dello studente (anomalia di cancellazione) • Similmente se uno studente non ha ancora dato esami non puo’ essere inserito (anomalia di inserimento) • Soluzione:decomporre in due relazioni !! DIPENDENZE FUNZIONALI • Dipendenza Funzionale e’ un particolare vincolo di integrita’ che esprime legami funzionali tra gli attributi di una relazione. • Cosi’ ad esempio il valore di Matricola implica quelli di Nome e Telefono. Inoltre Matricola e Corso implicano il Voto. • Matricola -----> Nome Telefono • Matricola Corso ----> Voto Definizione di Dipendenza Funzionale • Sia R(A1,A2,…,An) uno schema relazionale, X ed Y sottoinsiemi di {A1,A2,…,An}. Diciamo che X implica funzionalmente Y , in simboli X--->Y se , per ogni relazione r dello schema R, se due tuple t1 e t2 di r coincidono su tutti gli attributi di X allora devono anche coincidere su tutti gli attributi di Y. • Esempio : • Matricola, Corso ---> Voto NOTAZIONI • • • • A,B,… attributi U,V,W,X,Y,Z insiemi di attributi R schema relazionale , r relazione. ABC sta per {A,B,C}, XY sta per X ∪ Y , XA e AX stanno per X ∪ {A} Soddisfazione di Dipendenze Funzionali • Diciamo che una relazione r soddisfa la dipendenza funzionale X---> Y se per ogni coppia di tuple t1 e t2 in r t1[X] = t2[X] implica t1[Y] = t2[Y]. Una Logica delle Dipendenze Funzionali : SEMANTICA • Sia F un insieme di dipendenze funzionali per uno schema relazionale R e sia X--->Y una dipendenza funzionale. Diciamo che F logicamente implica X--->Y, e si scrive F |== X--->Y, se per ogni relazione r di R che soddisfa tutte le dipendenze di F, r soddisfa anche X--->Y. • Esempio: {A--->B,B--->C}|== A--->C. Chiusura di un insieme di dipendenze funzionali • Dato un insieme F di dipendenze funzionali la sua chiusura F+ e’ l’insieme delle dipendenze funzionali che sono implicate logicamente da F, in simboli • F+ = {X--->Y | F |== X--->Y}. Chiavi per uno schema con insieme di dipendenze funzionali Sia R(A1,A2,…,An) uno schema, F un insieme di dipendenze funzionali su R ed X un sottoinsieme di {A1,A2,…,An}. Si dice che X e’ una chiave di (R,F) se: – X---> A1A2…An e’ in F+ . – Per ogni sottoinsieme proprio Y di X la dipendenza Y---> A1A2…An non e’ in F+ . Necessita’ di un Calcolo Logico • Quindi il problema e’ quello di calcolare la chiusura di un insieme F di dipendenze funzionali. Per far cio’ definiamo un calcolo logico tale che F|== X--->Y se e soltanto se X--->Y si puo’ sintatticamente dedurre da F nel calcolo logico. • I punti di partenza e le regole del calcolo sono i seguenti: Assiomi di Armstrong • • • • • • • U={A1,A2,…,An} Riflessivita’ Se Y⊆ X ⊆ U allora F |--- X--->Y Aumento Se F|--- X--->Y allora F |--- XZ--->YZ Transitivita’ Se F|--- X--->Y e F|--- Y--->Z allora F|--- X--->Z • Notazione X--->Y si deduce da F applicando gli assiomi di Armstrong F|--- X--->Y Deducibilita’ di dipendenze funzionali • Diciamo che F|--- X--->Y se X--->Y si puo’ dedurre da F applicando un numero finito di volte gli assiomi di Armstrong. Cioe’ esiste una catena D1,D2,…,Dk= X-->Y tale che Di e’ in F oppure si ottiene da precedenti mediante gli assiomi di Armstrong. • Esempio {A--->B, B--->C, C--->D}|- A-->D (applicando 2 volte la transitivita’) Correttezza e Completezza • Correttezza: Se F |--- X---> Y allora F |== X---> Y • Completezza: Se F |== X---> Y allora F |--- X---> Y Dimostrazione della Correttezza Basta dimostrare che gli assiomi di Armstrong sono corretti • Riflessivita’ Se Y⊆ X ⊆ U allora F |== X--->Y Dimostrazione: se t1(X)=t2(X) allora ovviamente anche t1(Y)=t2(Y) perché ogni attributo di Y sta anche in X. Correttezza dell’Aumento • Aumento Se F|== X--->Y allora F |== XZ--->YZ Dimostrazione: Supponiamo che r|==F allora, per ipotesi, r |== X--->Y . Supponiamo che t1(XZ)=t2(XZ) allora t1(X)=t2(X) da cui segue, per ipotesi , t1(Y)=t2(Y) e quindi t1(YZ)=t2(YZ). Correttezza della TRANSITIVITA’ • Transitivita’ Se F|== X--->Y e F|== Y--->Z allora F|== X--->Z Dimostrazione: Supponiamo che r|==F allora, per ipotesi, r |== X--->Y e r |== Y--->Z. Supponiamo che t1(X)=t2(X) allora per la prima t1(Y)=t2(Y) da cui per la seconda t1(Z)=t2(Z). Correttezza • Supponiamo che F|--- X--->Y e sia D1,D2,…,Dn= X--->Y la relativa catena. Procedendo per induzione, se Di e’ in F allora ovviamente F|= Di. Se Di si ottiene da precedenti Dj mediante gli assiomi di Armstrong allora per l’ipotesi induttiva F|= Dj e per la correttezza dei singoli assiomi si ha F|= Di. Segue F|= Dn cioe’ F|= X--->Y. • Prima di verificare la completezza degli assiomi di amstrong introduciamo altre regole per derivare dipendenze funzionali Primo lemma preliminare: La regola di Decomposizione • Se F|--- X--->Y e Z⊆ ⊆ Y allora F|--- X--->Z Dimostrazione: Se F|---X--->Y e Z ⊆ Y allora per riflessivita’ F|--- Y--->Z da cui per transitivita’ si ottiene F|--- X--->Z. Secondo lemma preliminare: La Regola dell’Unione • Se F|--- X--->Y e F|--- X--->Z allora F|--- X--->YZ Dimostrazione: Se F|---X--->Y e F|--- X--->Z aumentando la prima di X e la seconda di Y si ha F|--- X--->XY e F|--- XY--->YZ che per transitivita’ implicano F|--- X--->YZ. Terzo lemma preliminare: La Regola di pseudotransitivita’ • Se F|--- X--->Y e F|--- WY--->Z allora F|--- WX--->Z Dimostrazione: Se F|---X--->Y e F|--- WY--->Z aumentando la prima di W e si ha F|--- WX--->WY e F|--WY--->Z che per transitivita’ implicano F|--- WX--->Z. Chiusura di un insieme funzionale • La chiusura di un insieme funzionale F+ e’ un lavoro che consuma molto tempo perche’ F+ puo’ essere molto grande anche se F e’piccolo. Lemma Fondamentale • Definiamo XF+ = {A | F|--- X--->A}. Ometteremo l’indice F quando non c’e’ ambiguita’ e scriveremo semplicemente X+. • LEMMA. F|--- X--->Y se e solo se Y ⊆ X+. Dimostrazione: Sia Y=A1A2…An e supponiamo che Y ⊆ X+. Allora per definizione F|--- X--->Ai per ogni i = 1,2,…,n. Da questa per la regola dell’unione si ha F|--- X--->Y. Viceversa se F|--- X--->Y allora per la regola di decomposizione si ha F|--- X--->Ai per ogni i = 1,2,…,n , e quindi Y ⊆ X+. Dimostrazione di Completezza degli Assiomi di Armstrong • Dobbiamo dimostrare che se F|==X--->Y allora F|--X---> Y. Basta far vedere che se non F|--- X---> Y allora non F|== X---> Y. • Infatti supponiamo che non F|--- X---> Y allora per il lemma Y ⊄ X+ e Y ≠ X+. Allora e’ possibile considerare la relazione r dello stesso schema fatta dalle due tuple t1 e t2 • t1=1 1 … 1 1 1….1, t2=1 1 … 1 0 0….0 • X+ not X+ X+ not X+ • Facciamo vedere che r soddisfa tutte le dipendenze di F. – Infatti, supponiamo che ci sia una V--->W in F tale che r non la soddisfa. Questo vuol dire che t1 e t2 coincidono su V ma non su W. Questo vuol dire che V⊆ X+ e W ⊆ X+ . Per il lemma segue che F|---X-->V che assieme a F|--- V--->W per transitivita’ da’ F|---X---> W che contraddice W ⊆ X+ . Quindi r soddisfa tutte le dipendenze di F. • Tuttavia r non soddisfa X--->Y. Infatti t1(X)=t2(X) ma t1(Y) ≠ t2(Y) poiche’ Y ⊆ X+ in quanto, per ipotesi, non F|--- X--->Y. • Quindi non F|== X--->Y , che conclude la dimostrazione di completezza. Chiusure,Equivalenze e Ricoprimenti Minimi Prof.ssa Rosalba Giugno Calcolo delle Chiusure • Ricordiamo che • F+ = {X--->Y | F |== X--->Y}. • Il calcolo puo’ essere molto costoso in quanto ad esempio se • F= {A--->B1,A--->B2,…,A--->Bn} • allora F+ include A--->Y per ogni Y sottoinsieme di {B1,B2,…,Bn}. Quindi ha cardinalita’ almeno 2n. Chiusura di un insieme di attributi • Facciamo vedere invece come e’ possibile un calcolo efficace di • X+ = {A | F |== X--->A}. • Il calcolo avviene attraverso il seguente Algoritmo Algoritmo per X+ • X(0) <--- X (inizializzazione) • X(j+1) <--- X(j) ∪ {A | esiste Y--->Z in F | A in Z e Y ⊆ X(j) } • Sia i il minimo indice tale che X(i) = X(i+1) = X(i+2) =….. • Allora X+ = X(i) . Correttezza dell’algoritmo Dimostriamo per induzione su j che X(j) ⊆ X+ per ogni j. Infatti X(0) = X ⊆ X+. Inoltre supponiamo che X(j) ⊆ X+ , allora X(j+1) <--- X(j) ∪ {A | esiste Y--->Z in F | A in Z e Y ⊆ X(j) } Consideriamo Y ⊆ X(j) ⊆ X+ con Y--->Z in F e A in Z. Allora F |== X--->Y e F |== Y--->Z da cui per transitivita’ F |== X-->Z, per la riflessivita’ Z- A, per transitivita’ XA, per cui A e’ in X+ che implica X(j+1) ⊆ X+ . Viceversa • Viceversa supponiamo che A e’ in X+ e facciamo vedere che A e’ in X(i) dove i e’ il minimo indice tale che X(i) = X(i+1). • Infatti supponiamo per assurdo che A non appartenga a X(i) e consideriamo la relazione r fatta dalle due tuple • t1=1 1 … 1 1 1….1, t2=1 1 … 1 0 0….0 • X(i) not X(i) X(i) not X(i) • Dimostriamo che r soddisfa F. Infatti supponiamo che esista una V--->W in F tale che r non la soddisfa. Questo vuol dire che t1 e t2 coincidono su V ma non su W. Questo vuol dire che V ⊆ X(i) e W ⊆ X(i) . D’altra parte W ⊆ X(i+1) in quanto essendo V in X(i) applicando la dipendenza funzionale V--->W potremmo aggiungere W in X(i+1). Quindi X(i) e’ diverso da X(i+1) che contraddice X(i) = X(i+1). Quindi r soddisfa tutte le dipendenze di F. • Poiche’ A e’ in X+ allora F|==X--->A. Quindi r deve soddisfare X--->A. Ma cio’ e’ assurdo poiche’ t1(X)=t2(X) in quanto X(0) ⊆ X(i),ma t1(A) ≠ t2(A) poiche’ A non e’ in X(i). Quindi X(i) = X+ . Questo conclude la dimostrazione di correttezza. Equivalenze di dipendenze funzionali • Siano F,G insiemi di dipendenze funzionali allora diciamo che sono equivalenti se F+ = G+. • La relazione di equivalenza tra insiemi di dipendenza ci permette di capire quando due schemi di relazione rappresentano gli stessi fatti: basta controllare che gli attributi sono uguali e hanno le stesse dipendenze. • L’algoritmo e’ il seguente: Algoritmo di equivalenza • Per ogni Y--->Z in F controlliamo se essa e’ in G+calcolando YG+ e controllando se Z ⊆ YG+ .Questo implica F+ ⊆ G+. • Viceversa in maniera analoga si puo’ controllare se G+ ⊆ F+. Insiemi di Dipendenze Minimali Un insieme di dipendenze funzionali F e’ minimale se: 1. Ogni lato destro di una dipendenza e’ un singolo attributo. 2. Per ogni dipendenza X--->A in F , F - {X--->A} non e’ equivalente a F 3. Per ogni X--->A in F e Z e’ un sottoinsieme proprio di X, F - {X--->A} ∪{Z--->A} non e’ equivalente a F La regola 2 garantisce che nessuna dipendenza in F e’ridondante. La regola 3 garantisce che nessun attributo in qualunque primo membro sia ridondante. Ricoprimenti Minimali • Dato F si dice che G e’ un suo ricoprimento minimale se G e’ minimale ed e’ equivalente a F. • TEOREMA: Ogni insieme di dipendenze funzionali ha un ricoprimento minimale Dimostrazione del teorema del ricoprimento minimale • Dato l’insieme F costruiamo un insieme F’ ad esso equivalente con la proprieta’ 1 (Ogni lato destro di una dipendenza e’ un singolo attributo). • Per garantire la proprieta’ 2 (Per ogni dipendenza X--->A in F , - {X--->A} non e’ equivalente a F). Basta cancellare ogni dipendenza X--->A che non soddisfa 2. • Analogamente se esiste una regola che non soddisfa la 3 (Per ogni X--->A in F e Z e’ un sottoinsieme proprio di X, F - {X--->A} ∪{Z--->A} non e’ equivalente a F ), si accorcia e si continua il processo che avra’ termine ottenendo il ricoprimento minimale. Si puo’ dimostrare che basta applicare la regola 3. E solo alla fine la 2. Ma non viceversa!! F