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