• Non ci sono risultati.

Teoria della Progettazione delle Basi di Dati Relazionali

N/A
N/A
Protected

Academic year: 2021

Condividi "Teoria della Progettazione delle Basi di Dati Relazionali"

Copied!
74
0
0

Testo completo

(1)

& %

Teoria della Progettazione delle Basi di Dati Relazionali

Angelo Montanari

Dipartimento di Matematica e Informatica Universit`a di Udine

(2)

& %

Introduzione

Propriet`a richieste (forme normali) Algoritmi (normalizzazione)

Concetto base: dipendenza dei dati (vincolo sull’insieme delle possibili istanze di un dato schema di relazione)

Dato uno schema di relazione R, se un attributo A (risp., un

insieme di attributi X) determina un attributo B (risp., un insieme di attributi Y ) diremo che vi `e una dipendenza funzionale di B da A (risp., di Y da X) o che A (risp., X) determina

funzionalmente B (risp., Y )

Si noti che la proiezione di R su A, B (risp., X, Y ) definisce una funzione f : A → B (risp., X → Y ).

(3)

& %

Ridondanze e anomalie

Un esempio.

INFO FORN(NOME FORN, IND FORN, NOME PROD, PREZZO) vs.

FORNITORI(NOME FORN, IND FORN)

FORNISCE(NOME FORN, NOME PROD, PREZZO)

Problemi con la prima soluzione (la relazione universale):

• RIDONDANZA

• ANOMALIE DI AGGIORNAMENTO, INSERIMENTO e CANCELLAZIONE

Osservazione: legame tra dipendenze e ridondanza

(4)

& %

Le dipendenze funzionali - 1

Definizione. Una dipendenza funzionale tra un insieme di

attributi X e un insieme di attributi Y di uno schema di relazione R(T ), con X, Y ⊆ T , denotata X → Y , `e un vincolo di integrit`a sulle istanze della relazione

Definizione. Un’istanza r ∈ R(T ) soddisfa X → Y

(equivalentemente, X → Y vale in r) se per ogni coppia di tuple t1, t2 ∈ r, se t1[X] = t2[X], allora t1[Y ] = t2[Y ]

Osservazione: in ogni istanza valida r di R(T ), ΠXY (r) `e una funzione con dominio X e codominio Y

Definizione. Dato un insieme F di dipendenze funzionali su R(T ), si dice che r `e un’istanza valida di R(T ), rispetto a F , se

soddisfa tutte le dipendenze funzionali X → Y ∈ F

(5)

& %

Le dipendenze funzionali - 2

Significato delle dipendenze funzionali e loro legame con la nozione di chiave

Caso 1. R rappresenti un tipo di entit`a

Caso 2. R rappresenti una relazione molti a uno

Validit`a universale delle dipendenze funzionali (per ogni istanza valida)

Istanze che soddisfano le dipendenze funzionali (istanze valide) e istanze che violano le dipendenze funzionali

(6)

& %

Dipendenze derivate (semantica)

Ragionamento sulle dipendenze funzionali (un esempio, transitivit`a)

Implicazione logica tra dipendenze funzionali (nozione semantica) Definizione. Dati una relazione R(T ) e un insieme di dipendenze funzionali F (abbreviato RhT, F i), diciamo che F implica

logicamente X → Y (F |= X → Y ) se ogni istanza valida r dello schema RhT, F i soddisfa X → Y

Definizione. La chiusura di un insieme di dipendenze

funzionali F (denotata F+) `e l’insieme delle dipendenze funzionali logicamente implicate da F :

F+ = {X → Y | F |= X → Y }

(7)

& %

Dipendenze funzionali e chiavi

La nozione di chiave pu`o essere riespressa in termini di dipendenze funzionali

X ⊆ T `e chiave di RhT, F i se e solo se

1. X → A1A2 . . . An, con T = {A1, A2, . . . , An}, `e in F+ (la dipendenza di tutti gli attributi da X appartiene a F o `e logicamente implicata da F )

2. per nessun sottoinsieme proprio Y ⊂ X, Y → A1A2 . . . An appartiene a F+

(8)

& %

Un calcolo delle dipendenze funzionali

Gli assiomi di Armstrong

• Riflessivit`a (dipendenze banali) Se Y ⊆ X ⊆ T , allora X → Y (in particolare, X → X)

Osservazione: tali dipendenze valgono per ogni relazione (dipendono da T , non da F )

• Aumento Se X → Y e Z ⊆ T , allora XZ → Y Z (dove XZ abbrevia X ∪ Z)

• Transitivit`a Se X → Y e Y → Z, allora X → Z

Teorema. Gli assiomi di Armstrong sono corretti (se f `e derivabile da F mediante gli assiomi di Armstrong, allora f `e implicato

logicamente da F , abbreviato F ` f implica F |= f )

(9)

& %

Dipendenze derivate (sintassi)

Definizione. Una derivazione di una dipendenza funzionale f da F (denotato F ` f ) `e una sequenza finita f1, . . . , fm di dipendenze funzionali, dove fm = f e ogni dipendenza fi appartiene a F o `e ottenuta da dipendenze in {f1, . . . , fi−1} usando una regola di

inferenza valida (assiomi di Armstrong o regole di inferenza da essi ottenute)

Si noti che ogni sottosequenza iniziale f1, . . . , fk di f1, . . . , fm, con k ≤ m, `e a sua volta una derivazione, ossia F ` fk per ogni

k = 1, . . . , m

Esempio. Dati R(A, B, C, D) e F = {A → C, B → D}, dimostrare che AB `e una superchiave per R, ossia che F |= AB → ABCD (sfruttiamo la correttezza degli assiomi di Armstrong)

(10)

& %

Regole derivate

Alcune regole derivate di particolare interesse:

• Unione

Se X → A1, . . . , X → An, allora X → A1 . . . An (si consideri, ad esempio, il caso n = 2)

• Pseudo-Transitivit`a

Se X → Y e Y W → Z, allora XW → Z

• Decomposizione

Se X → Y e Z ⊆ Y , allora X → Z

(11)

& %

Chiusura di un insieme di attributi

Definizione. Dato uno schema RhT, F i e un insieme di attributi X ⊆ T , la chiusura di X rispetto a F (denotata XF+ o, se non vi sono ambiguit`a, semplicemente X+) `e l’insieme di attributi

{A ∈ T | F ` X → A}

Legame tra derivazione di dipendenze funzionali e chiusura di insiemi di attributi

Teorema (fondamentale). F ` X → Y se e solo se Y ⊆ X+

Teorema. Gli assiomi di Armstrong sono completi (F |= f implica F ` f )

(12)

& %

Determinazione delle chiusure - 1

Calcolare F+ `e troppo costoso (gi`a le dipendenze banali...)

Un primo algoritmo (chiusura lenta) per il calcolo della chiusura di un insieme di attributi X rispetto ad F (X+)

algoritmo CHIUSURA LENTA input RhT, F i, X ⊆ T

output X+ begin

X+ := X;

while X+ `e cambiato do

for each W → V ∈ F with W ⊆ X+ and V 6⊆ X+ do X+ := X+ ∪ V

end

(13)

& %

Determinazione delle chiusure - 2

Esempio. Sia dato uno schema RhT, F i, con T = {A, B, C, D, E, G, H, I} e F = {ADG → GI, ACH → ADG, BC → AD, CE → ACH}. Inoltre, sia Xj+ il valore della variabile X+ alla fine della j-esima iterazione del ciclo while

La chiusura di BCE viene calcolata nel seguente modo:

X0+(= X) = BCE

X1+ = BCE ∪ AD ∪ ACH = ABCDEH X2+ = ABCDEH ∪ ADG = ABCDEGH

X3+ = ABCDEGH ∪ GI = ABCDEGHI(= T )

L’algoritmo termina con BCE+ = T (BCE `e superchiave)

Teorema. L’algoritmo chiusura lenta termina sempre ed `e corretto e completo

(14)

& %

Determinazione delle chiusure - 3

Un secondo algoritmo (chiusura veloce) per il calcolo della chiusura di un insieme di attributi X rispetto ad F (X+)

algoritmo CHIUSURA VELOCE input RhT, F i, X ⊆ T

output X+ begin

# inizializzazione delle liste num(f ) e L(A) for each f = W → V ∈ F do

num(f ) := |W |;

for each A ∈ W do

aggiungi f a L(A);

# inizializzazione delle variabili X+ := X;

NAT T := X;

(15)

& %

Determinazione delle chiusure - 4

while NAT T 6= ∅ do # ciclo principale scegli A da NAT T;

NAT T := NAT T \ {A};

for each f = W → V ∈ L(A) do num(f ) := num(f ) − 1;

if num(f ) = 0 then

∆ := V \ X+;

NAT T := NAT T ∪ ∆;

X+ := X+ ∪ ∆ end

Osservazione. Mentre ∆ in X+ := X+ ∪ ∆ pu`o essere sostituito da V , `e fondamentale non inserire in NAT T attributi gi`a presi in esame

Teorema. L’algoritmo chiusura veloce termina sempre ed `e corretto e completo

(16)

& %

Determinazione delle chiusure - 5

Esempio. Sia dato uno schema RhT, F i, con T = {A, B, C, D, E} e F = {f1 = DB → E, f2 = B → C, f3 = A → B}

Inizializzazione:

num(f1) = 2, num(f2) = 1, num(f3) = 1

(nella tabella sottostante i valori correnti di num(f1), num(f2) e num(f3) sono riportati nella quarta, quinta e sesta colonna, rispettivamente)

L(A) = {f3}, L(B) = {f1, f2}, L(C) = ∅, L(D) = {f1}, L(E) = ∅

X+ NAT T A L(A) f1 f2 f3 f X+ NAT T

AD AD A f3 2 1 0 f3 B ADB BD

ADB BD B f1, f2 1 0 0 f2 C ADBC CD

ADBC CD C 1 0 0 ADBC D

ADBC D D f1 0 0 0 f1 E ADBCE E

ADBCE E E 0 0 0 ADBCE

(17)

& %

Insiemi di dipendenze equivalenti

Definizione. Due insiemi di dipendenze F e G sugli attributi T di una relazione R sono equivalenti (F ≡ G) se e solo se F+ = G+. Diciamo che F `e una copertura di G, e viceversa G `e una copertura di F , se F ≡ G

Dalla definizione segue immediatamente che F ≡ G se e solo se F+ ⊆ G+ e G+ ⊆ F+

E possibile dimostrare che F` + ⊆ G+ se e solo se F ⊆ G+ e, analogamente, che G+ ⊆ F+ se e solo se G ⊆ F+

(18)

& %

Coperture minimali (o canoniche) - 1

Insiemi di dipendenze minimali (coperture minimali/canoniche) Definizione. Sia F un insieme di dipendenze funzionali.

1. Data X → Y ∈ F , X contiene un attributo estraneo (o

ridondante) A se e solo se (F \ {X → Y }) ∪ {X \ A → Y } ≡ F , ossia se e solo se X \ A → Y ∈ F+

2. X → Y ∈ F `e una dipendenza ridondante se e solo se

F \ {X → Y } ≡ F , ossia se e solo se X → Y ∈ (F \ {X → Y })+

(19)

& %

Coperture minimali (o canoniche) - 2

3. F `e una copertura canonica se e solo se:

a. ogni parte destra di una dipendenza ha un unico attributo b. le dipendenze non contengono attributi estranei

c. non vi sono dipendenze ridondanti

Nota bene: l’ordine delle operazioni a, b e c `e fondamentale

Teorema. Per ogni insieme di dipendenze F , esiste una copertura canonica (non necessariamente unica)

(20)

& %

Calcolo della copertura minimale: l’algoritmo - 1

Algoritmo polinomiale per il calcolo di una copertura

minimale/canonica (si assuma che ogni dipendenza funzionale abbia un unico attributo nella parte destra)

algoritmo CALCOLO DELLA COPERTURA CANONICA input Insieme di dipendenze funzionali F

output G copertura canonica di F begin

G := F ;

for each X → Y ∈ G with |X| > 1 do begin

Z := X;

for each A ∈ X do if Y ⊆ (Z \ {A})+F then Z := Z \ {A};

G := (G \ {X → Y }) ∪ {Z → Y } end;

(21)

& %

Calcolo della copertura minimale: l’algoritmo - 2

for each X → Y ∈ G do

if Y ⊆ XG\{X→Y }+ then G := G \ {X → Y } end

Osservazione. Un insieme di dipendenze funzionali pu`o avere pi`u coperture canoniche

Esempio. Per l’insieme F = {AB → C, A → B, B → A}, sia

F = {B → C, A → B, B → A} che F = {A → C, A → B, B → A}

sono coperture canoniche

(22)

& %

Decomposizione di schemi - 1

Definizione. Dato uno schema RhT, F i, ρ = {R1(T1), . . . , Rk(Tk)} `e una decomposizione di R se e solo se ∪iTi = T

Non tutte le decomposizioni conservano i dati.

Esempio. Si consideri una relazione con schema R(P, T, C), con associato l’insieme F = {T → C, C → P } di dipendenze funzionali, che memorizza informazioni relative ai proprietari (P ) di case (C) dotate di uno o pi`u telefoni (T ). Sia data la seguente istanza di R

P T C

p1 t1 c1 p1 t2 c2 p1 t3 c2

(23)

& %

Decomposizione di schemi - 2

Esempio (continua). Supponiamo di decomporre lo schema nelle due relazioni R1(P, T ) e R2(P, C). Le corrispondenti istanze sono r1 = ΠP,T (R)

P T

p1 t1 p1 t2 p1 t3 e r2 = ΠP,C(R)

P C

p1 c1 p1 c2

(24)

& %

Decomposizione di schemi - 3

Esempio (continua). Per ricostruire l’istanza iniziale occorre

fondere le due istanze della decomposizione attraverso un natural join. Il risultato che si ottiene non coincide, per`o, con l’istanza data: ha pi`u tuple (e viola le dipendenze)

P T C

p1 t1 c1 p1 t1 c2 p1 t2 c1 p1 t2 c2 p1 t3 c1 p1 t3 c2

(25)

& %

Decomposizioni lossless join

Definizione. Una decomposizione ρ = {R1(T1), . . . , Rk(Tk)} di RhT, F i preserva i dati (`e lossless join) se e solo se per ogni istanza r ∈ R che soddisfa F , r = ΠT1(r) ./ . . . ./ ΠTk(r)

In generale, vale solo il seguente teorema:

Teorema. Sia mρ(r) = ΠT1(r) ./ . . . ./ ΠTk(r). Data una

decomposizione ρ = {R1(T1), . . . , Rk(Tk)} qualunque di RhT, F i, per ogni istanza r ∈ R si ha che r ⊆ mρ(r)

Alcune (altre) propriet`a interessanti (ad esempio, r ⊆ s implica mρ(r) ⊆ mρ(s))

Un punto di vista diverso: le tuple isolate (tuple che possono essere rappresentate solo attraverso alcune delle relazioni componenti)

(26)

& %

Controllo dei lossless join: un algoritmo - 1

algoritmo CONTROLLO DEI LOSSLESS JOIN

input Uno schema relazionale RhT, F i, con T = {A1, . . . , An}, e una scomposizione ρ = {R1(T1), . . . , Rk(Tk)}

output ρ `e/non `e una scomposizione lossless join metodo inizializzazione

costruire una tabella con n colonne e k righe, dove la colonna j corrisponde all’attributo Aj e la riga i allo schema Ri;

porre il simbolo aj nella posizione (i, j) se Aj ∈ Ti, altrimenti porre bij;

elaborazione

si considerino ordinatamente e ripetutamente le dipendenze X → Y ∈ F fino a quando esse non provocano pi`u variazioni nella tabella

(27)

& %

Controllo dei lossless join: un algoritmo - 2

per ogni dipendenza X → Y e ogni coppia di righe, se le due righe coincidono su X, allora renderle uguali su Y e propagare le variazioni

(dati due simboli da uguagliare, se uno dei due `e aj, sostituire l’altro con aj; se sono bij e blj, sostituire blj con bij, o viceversa, a discrezione;

quando due simboli sono uguagliati, uguagliare tutte le occorrenze di tali simboli nella tabella)

risultato

se al termine dell’elaborazione, esiste almeno una riga con tutte a (riga a1, . . . , an), la decomposizione `e lossless join, altrimenti non lo `e

(28)

& %

Un esempio - 1

Esempio. Siano dati lo schema RhT, F i, con T = {A, B, C, D, E} e F = {A → C, DE → C, B → C, CE → A, C → D}, e la

decomposizione ρ = {R1({A, D}), R2({A, B}), R3({B, E}), R4({C, D, E}), R5({A, E})}

A B C D E

a1 b12 b13 a4 b15 a1 a2 b23 b24 b25 b31 a2 b33 b34 a5 b41 b42 a3 a4 a5 a1 b52 b53 b54 a5

(29)

& %

Un esempio - 2

Esempio (continua). Con l’applicazione delle dipendenze A → C, DE → C (non produce effetti) e B → C, si ottiene la tabella:

A B C D E

a1 b12 b13 a4 b15 a1 a2 b13 b24 b25 b31 a2 b13 b34 a5 b41 b42 a3 a4 a5 a1 b52 b13 b54 a5

(30)

& %

Un esempio - 3

Esempio (continua). Con l’applicazione delle dipendenze CE → A e C → D, si ottiene la tabella:

A B C D E

a1 b12 b13 a4 b15 a1 a2 b13 a4 b25 a1 a2 b13 a4 a5 b41 b42 a3 a4 a5 a1 b52 b13 a4 a5

(31)

& %

Un esempio - 4

Esempio (continua). All’iterazione successiva, grazie agli effetti

delle dipendenze DE → C, B → C e CE → A, si ottiene la tabella:

A B C D E

a1 b12 a3 a4 b15 a1 a2 a3 a4 b25 a1 a2 a3 a4 a5 a1 b42 a3 a4 a5 a1 b52 a3 a4 a5

L’applicazione delle dipendenze funzionali non produce pi`u effetti.

C’`e una riga con tutte a: decomposizione lossless join

(32)

& %

Risultati - 1

Teorema. L’algoritmo proposto termina ed `e corretto e completo.

La terminazione `e immediata (`e sufficiente osservare come ogni

applicazione di una dipendenza che produce effetti riduca il numero di valori diversi presenti nella tabella)

E, inoltre, facile mostrare che se la tabella finale non contiene una` riga di tutte a, allora la decomposizione non `e lossless join (la

tabella finale stessa costituisce un controesempio: essa pu`o essere vista come un’istanza r della relazione, che soddisfa tutte le

dipendenze, tale che (a1, . . . , an) 6∈ r e (a1, . . . , an) ∈ mρ(r);

l’ultima appartenenza segue dalla definizione di decomposizione e dalle modalit`a di inizializzazione ed elaborazione della tabella)

(33)

& %

Risultati - 2

Osservazione. L’esecuzione dell’algoritmo pu`o essere terminata non appena viene prodotta una riga con tutte a (una volta generata, una tale riga non pu`o essere pi`u rimosssa)

Un caso particolare:

Teorema. Sia ρ = {R1(T1), R2(T2)} una decomposizione di RhT, F i.

ρ `e una decomposizione lossless join se e solo se T1 ∩ T2 → T1 ∈ F+ oppure T1 ∩ T2 → T2 ∈ F+ (o entrambe)

(34)

& %

Decomposizioni che preservano le dipendenze - 1

(Contro)esempio. Consideriamo nuovamente la relazione R(P, T, C), con associato l’insieme di dipendenze

F = {T → C, C → P }, che memorizza informazioni relative ai proprietari (P ) di case (C) dotate di uno o pi`u telefoni (T ), e la relativa istanza

P T C

p1 t1 c1 p1 t2 c2 p1 t3 c2

Sia data la decomposizione ρ = {R1({P, T }), R2({T, C})}

(35)

& %

Decomposizioni che preservano le dipendenze - 2

Controesempio (continua). Le corrispondenti istanze sono r1 = ΠP,T (R)

P T

p1 t1 p1 t2 p1 t3 e r2 = ΠT,C(R)

T C

t1 c1 t2 c2 t3 c2

(36)

& %

Decomposizioni che preservano le dipendenze - 3

Controesempio (continua). La decomposizione preserva i dati

perch´e P T ∩ T C(= T ) → T C `e derivabile da F (aumento di T → C con T ) e, quindi, per la correttezza degli assiomi di Armstrong,

appartiene a F+

La decomposizione non conserva, per`o, la dipendenza C → P , dove C ∈ R2 e P ∈ R1.

Conseguenze della perdita di dipendenze: inserimenti inconsistenti

(37)

& %

Un esempio di inserimento inconsistente

Esempio. Si supponga di voler inserire nella base di dati il fatto che la casa c2 ha un nuovo telefono t4 intestato alla persona p2.

Se applicato alla relazione R, un tale inserimento verrebbe proibito perch´e violerebbe la dipendenza C → P (la casa c2 `e gi`a associata alla persona p1 e il telefono va intestato all’unico proprietario della casa)

Se applicato alle relazioni R1 ed R2, l’inserimento va a buon fine, perch´e non viola le dipendenze associate ai due schemi (la

dipendenza C → P `e stata persa per effetto della decomposizione) Decomposizione alternativa che preserva dati e dipendenze:

ρ = {R1({T, C}), R2({C, P })}

(38)

& %

Proiezione di insiemi di dipendenze

Definizione. Dati RhT, F i e Ti ⊆ T , la proiezione di F su Ti, denotata ΠTi(F ), `e l’insieme di dipendenze

{X → Y ∈ F+ | X, Y ⊆ Ti}

Nota Bene: la definizione utilizza l’insieme F+ non l’insieme F Esempio. Si consideri la relazione RhT, F i, con T = {A, B, C} e F = {A → B, B → C, C → A}. Si ha che ΠAB(F ) =

{A → B, B → A} (pi`u le dipendenze banali e dipendenze immediatamente derivabili, quale, ad esempio, A → AB) e ΠAC(F ) = {A → C, C → A} (pi`u le dipendenze banali e dipendenze immediatamente derivabili).

(39)

& %

Un algoritmo per il calcolo delle proiezioni

Un algoritmo banale (di complessit`a esponenziale) per il calcolo delle proiezioni di un insieme di dipendenze

algoritmo CALCOLO DELLE PROIEZIONI input RhT, F i e Ti ⊆ T

output una copertura della proiezione di F su Ti begin

for each Y ⊆ Ti do begin

Z := YF+

restituisci Y → (Z ∩ Ti) end

end

(40)

& %

Conservazione delle dipendenze: formalizzazione

Definizione. Una decomposizione ρ = {R1(T1), . . . , Rk(Tk)} di una relazione RhT, F i preserva le dipendenze se e solo se

ki=1ΠTi(F ) ≡ F

Esempio. Si consideri lo schema di relazione RhT, F i, dove T = {A, B, C} e F = {A → B, B → C, C → A}. Dato che

AC 6⊆ AB and AC 6⊆ BC, uno potrebbe essere indotto a pensare che la decomposizione ρ = {R1({A, B}), R2({B, C})} non preservi le dipendenze (la dipendenza C → A non viene proiettata n´e su R1 n´e su R2).

Cos`ı non `e: da {A → B, B → A} ⊆ ΠAB(F ) e {B → C, C → B} ⊆ ΠBC(F ), segue ΠAB(F ) ∪ ΠBC(F ) ` C → A

(41)

& %

Proiezioni e calcolo della chiusura

Un algoritmo (di complessit`a polinomiale) per il calcolo della chiusura di un insieme di attributi rispetto all’unione delle proiezioni di un insieme di dipendenze

algoritmo CALCOLO DELLA CHIUSURA

input RhT, F i, X ⊆ T e ρ = {R1(T1), . . . , Rk(Tk)}

output XG+, dove G = ∪ki=1ΠTi(F ) begin

XG+ := X;

while (XG+ `e cambiato) do

for each i := 1 to k do

XG+ = XG+ ∪ ((XG+ ∩ Ti)+F ∩ Ti) end

Nota bene: l’insieme G non viene esplicitamente determinato

(42)

& %

Controllo della conservazione delle dipendenze

Un algoritmo (di complessit`a polinomiale) per stabilire se una data scomposizione preserva o meno le dipendenze associate ad una data relazione

algoritmo CONTROLLO DELLA CONSERVAZIONE DELLE DIPENDENZE

input una decomposizione ρ = {R1(T1), . . . , Rk(Tk)} di RhT, F i output ρ `e/non `e una decomposizione che preserva le dipendenze begin

for each X → Y ∈ F do

if Y 6⊆ XG+ then termina con NO termina con SI

end

dove XG+ `e determinato con l’algoritmo per il calcolo della chiusura

(43)

& %

Un esempio - 1

Esempio. Sia data lo schema di relazione RhT, F i, dove T = {A, B, C, D} e F = {A → B, B → C, C → D, D → A}. Data la circolarit`a delle dipendenze, `e facile vedere come ogni attributo determini

tutti gli altri.

Controlliamo se la decomposizione ρ = {R1({A, B}), R2({B, C}), R3({C, D})} preserva o meno le dipendenze utilizzando l’algoritmo proposto.

Le prime tre dipendenze sono banalmente preservate.

Concentriamo la nostra attenzione sulla quarta, verificando se A ∈ DG+, dove G = ΠAB(F ) ∪ ΠBC(F ) ∪ ΠCD(F )

(44)

& %

Un esempio - 2

Iniziamo il calcolo di D+G, ponendo DG+ = {D}. Il corpo del ciclo eseguito per R1 non modifica DG+ perch´e {D} ∪ (({D} ∩ {A, B})+F

∩{A, B}) = {D}. Lo stesso accade per R2 perch´e {D} ∪ (({D}∩

{B, C})+F ∩{B, C}) = {D}. Per R3 si ha:

DG+ = {D} ∪ (({D} ∩ {C, D})+F ∩ {C, D})

= {D} ∪ (({D})+F ∩ {C, D})

= {D} ∪ ({A, B, C, D} ∩ {C, D})

= {C, D}

Analogamente, nel passo successivo, eseguendo il corpo del ciclo per R2 su DG+ = {C, D} produce DG+ = {B, C, D}. Infine, nel terzo

passo si ottiene D+G = {A, B, C, D}, da cui risulta vero che A ∈ DG+.

(45)

& %

Conservazione di dati e dipendenze

Come confermato dagli esempi precedenti, conservazione dei dati e conservazione delle dipendenze sono due propriet`a indipendenti:

• vi possono essere decomposizioni lossless join che non preservano le dipendenze

• vi possono essere decomposizioni che preservano le dipendenze, ma non sono lossless join

(46)

& %

Forme normali - 1

Normalizzazione dei dati: processo attraverso il quale schemi di relazione insoddisfacenti, ossia schemi che presentano ridondanze e possono, quindi, causare anomalie di aggiornamento, sono

decomposti in schemi di relazione pi`u piccoli che possiedono le propriet`a volute

Forme normali: strumento per la valutazione della qualit`a di schemi di relazione individuali. Permettono di stabilire se uno schema si trova o meno nella forma (normale) voluta. In caso di violazione, lo schema pu`o essere decomposto in modo che gli schemi delle relazioni componenti rispettino la forma (normale) voluta

(47)

& %

Forme normali - 2

Prima forma normale (1NF), basata sulla definizione di relazione Seconda forma normale (2NF), terza forma normale (3NF) e

forma normale di Boyce-Codd (BCNF), tutte basate sulla nozione di dipendenza funzionale

Quarta forma normale, basata sulla nozione di dipendenza multivalore

Quinta forma normale, basata sulla nozione di join-dipendenza

(48)

& %

Forme normali - 3

Osservazione fondamentale

in generale non `e sufficiente garantire che il processo di

decomposizione generi relazioni nella forma normale voluta; occorre anche garantire che:

1. la decomposizione conservi i dati (sia lossless join) 2. la decomposizione preservi le dipendenze

Definizione. Dato uno schema di relazione RhT, F i, un attributo A ∈ T si dice primo se e solo se appartiene ad almeno una chiave;

altrimenti, si dice non primo

Il problema di stabilire se un attributo `e primo o meno `e NP-completo

(49)

& %

Prima forma normale - 1

Eliminazione degli attributi multivalore Relazione non in 1NF:

DIPARTIMENTO DNUMERO DNOME MANAGER DSEDE

con dipendenze:

DN U M ERO → DN OM E, DN U M ERO → M AN AGER, DN U M ERO → DSEDE(?)

Istanza di relazione:

DIPARTIMENTO DNUMERO DNOME MANAGER DSEDE

5 Ricerca RSS.. {Roma, Bologna}

4 Sviluppo VRD.. V enezia 1 Direzione BNC.. Bologna

(50)

& %

Prima forma normale - 2

Relazione in 1NF (con ridondanza):

DIPARTIMENTO DNUMERO DNOME MANAGER DSEDE

5 Ricerca RSS.. Roma

5 Ricerca RSS.. Bologna

4 Sviluppo VRD.. V enezia 1 Direzione BNC.. Bologna

(51)

& %

Prima forma normale - 3

Eliminazione degli attributi strutturati

Relazione IMP PROG (Impiegato Progetto) con attributi CF

(codice fiscale), INOME (nome impiegato) e PROG (progetto a cui l’impiegato dedica il maggior numero di ore, con indicazione del numero di ore) non in 1NF:

IMP PROG CF INOME PROG(PNUMERO,ORE)

con dipendenze:

CF → IN OM E, CF → P ROG(?)

L’attributo strutturato PROG pu`o essere visto come una relazione annidata

(52)

& %

Prima forma normale - 4

Istanza di relazione:

IMP PROG CF INOME PROG(PNUMERO,ORE)

RSS.. Rossi Antonio (1,18) VRD.. Verdi Filippo (3,36) BNC.. Bianchi Livio (3,12)

Relazione in 1NF (senza ridondanze):

IMP PROG CF INOME PNUMERO ORE

RSS.. Rossi Antonio 1 18

VRD.. Verdi Filippo 3 36

BNC.. Bianchi Livio 3 12

(53)

& %

Prima forma normale - 5

Eliminazione degli attributi strutturati e multivalore

Relazione IMP PROG (Impiegato Progetto) con una relazione annidata PROG multivalore non in 1NF:

IMP PROG CF INOME PROG(PNUMERO,ORE)

con dipendenze:

CF → IN OM E, CF → P ROG(?)

(54)

& %

Prima forma normale - 6

Istanza di relazione:

IMP PROG CF INOME PROG(PNUMERO,ORE)

RSS.. Rossi Antonio {(1,18), (2,18)}

VRD.. Verdi Filippo {(3,36)}

BNC.. Bianchi Livio {(2,12),(3,12),(5,12)}

Relazione IMP PROG in 1NF

IMP PROG CF INOME PNUMERO ORE

(55)

& %

Seconda forma normale - 1

La nozione di dipendenza funzionale parziale e totale

Una dipendenza funzionale X → Y `e una dipendenza funzionale totale se la rimozione di un qualsiasi attributo A da X rende la dipendenza non pi`u valida (∀A(X \ {A} 6→ Y ))

Una dipendenza funzionale X → Y `e una dipendenza funzionale parziale se qualche attributo di X pu`o essere rimosso senza

pregiudicare la validit`a della dipendenza (∃A(X \ {A} → Y ))

Definizione. Uno schema di relazione RhT, F i `e in seconda forma normale (2NF) se ogni attributo non primo A ∈ T dipende

totalmente da ogni chiave di R

(56)

& %

Seconda forma normale - 2

Sia dato lo schema di relazione (non in 2NF):

IMP PROG CF PNUMERO ORE INOME PNOME PSEDE

con dipendenze:

CF P N U M ERO → ORE CF → IN OM E

P N U M ERO → P N OM E P SEDE

(57)

& %

Seconda forma normale - 3

Decomposizione in 2NF:

IP1 CF PNUMERO ORE

con dipendenze:

CF P N U M ERO → ORE

IP2 CF INOME

con dipendenze:

CF → IN OM E

IP3 PNUMERO PNOME PSEDE

con dipendenze:

P N U M ERO → P N OM E P SEDE

(58)

& %

Terza forma normale - 1

La nozione di dipendenza funzionale transitiva e non transitiva Una dipendenza funzionale X → Y `e una dipendenza funzionale transitiva se esiste un insieme di attributi Z che non `e contenuto in alcuna chiave ed `e tale che valgono sia X → Z che Z → Y

Definizione. Uno schema di relazione RhT, F i `e in terza forma normale (3NF) se ogni attributo non primo A ∈ T dipende

totalmente da ogni chiave di R (R `e in 2NF) e dipende in modo non transitivo da ogni chiave di R

Definizione (alternativa). Uno schema di relazione RhT, F i `e in terza forma normale (3NF) se e solo se, per ogni dipendenza funzionale non banale X → A ∈ F+, X `e superchiave o A `e primo

(59)

& %

Terza forma normale - 2

Sia dato lo schema di relazione (non in 3NF):

IMP DIP CF INOME DNASCITA IND DNUMERO DNOME MANAGER

con dipendenze:

CF → IN OM E DN ASCIT A IN D DN U M ERO DN U M ERO → DN OM E M AN AGER

(60)

& %

Terza forma normale - 3

Decomposizione in 3NF:

ID1 CF INOME DNASCITA IND DNUMERO

con dipendenze:

CF → IN OM E DN ASCIT A IN D DN U M ERO

IP2 DNUMERO DNOME MANAGER

con dipendenze:

DN U M ERO → DN OM E M AN AGER

(61)

& %

Un esempio di normalizzazione - 1

Sia dato lo schema di relazione (non in 2NF):

APPEZZAMENTO PROP ID CONTEA APP ID AREA VALORE ALIQUOTA

con dipendenze:

P ROP ID → CON T EA AP P ID AREA V ALORE ALIQU OT A CON T EA AP P ID → P ROP ID AREA V ALORE ALIQU OT A CON T EA → ALIQU OT A

AREA → V ALORE

(62)

& %

Un esempio di normalizzazione - 2

Decomposizione in 2NF:

APPEZZAMENTO1 PROP ID CONTEA APP ID AREA VALORE

con dipendenze:

P ROP ID → CON T EA AP P ID AREA V ALORE CON T EA AP P ID → P ROP ID AREA V ALORE AREA → V ALORE

APPEZZAMENTO2 CONTEA ALIQUOTA

con dipendenze:

CON T EA → ALIQU OT A

(63)

& %

Un esempio di normalizzazione - 3

Decomposizione in 3NF:

APPEZZAMENTO11 PROP ID CONTEA APP ID AREA

con dipendenze:

P ROP ID → CON T EA AP P ID AREA CON T EA AP P ID → P ROP ID AREA

APPEZZAMENTO12 AREA VALORE

con dipendenze:

AREA → V ALORE

(64)

& %

Controllo della 3NF - 1

Come verificare se uno schema di relazione `e in 3NF senza generare F+?

Valgono il seguente teorema e l’immediato corollario

Teorema. Uno schema di relazione RhT, F i `e in 3NF se e solo se, per ogni dipendenza funzionale X → A1 .. An ∈ F e per ogni i ∈ {1, .., n}, Ai ∈ X oppure X `e una superchiave oppure Ai `e primo

Corollario. Uno schema di relazione RhT, F i, con F copertura canonica, `e in 3NF se e solo se, per ogni dipendenza funzionale elementare X → A ∈ F , X `e una superchiave oppure A `e primo

(65)

& %

Controllo della 3NF - 2

E’ comunque necessario determinare l’insieme di attributi primi..

Proposizione. Il problema di decidere se uno schema di relazione `e in 3NF `e NP-completo

Esempio. Consideriamo lo schema di relazione

Rh{P REF ISSO, N U M ERO, LOCALIT A0, N OM EABBON AT O, V IA}, {P REF ISSO N U M ERO → LOCALIT A0, P REF ISSO N U M ERO → N OM EAABON AT O, P REF ISSO N U M ERO → V IA, LOCALIT A0 → P REF ISSO}i che descrive gli abbonati al telefono. Le chiavi della relazione sono (P REF ISSO N U M ERO) e (LOCALIT A0, N U M ERO)

Esiste, per`o, una ridondanza: ogni volta che si inserisce un nuovo numero telefonico di una certa localit`a, occorre ripetere l’informazione sul prefisso

(66)

& %

La forma normale di Boyce-Codd (BCNF)

Definizione. Uno schema di relazione RhT, F i `e nella forma normale di Boyce-Codd (BCNF) se e solo se per ogni dipendenza funzionale non banale X → Y ∈ F+, X `e una superchiave.

Come verificare se uno schema di relazione `e in BCNF senza generare F+?

Valgono il seguente teorema e l’immediato corollario

Teorema. Uno schema di relazione RhT, F i `e in BCNF se e solo se, per ogni dipendenza funzionale non banale X → Y ∈ F , X `e una superchiave

Corollario. Uno schema di relazione RhT, F i, con F copertura canonica, `e in BCNF se e solo se, per ogni dipendenza funzionale elementare X → A ∈ F , X `e una superchiave

(67)

& %

Ottimalit` a di BCNF

Teorema. In una relazione in BCNF, nessun valore pu`o essere

determinato a partire da altri utilizzando le dipendenze funzionali Il teorema stabilisce l’ottimalit`a della BCNF rispetto ai vincoli imposti dalle dipendenze funzionali

(68)

& %

Un secondo esempio di normalizzazione - 1

Sia dato lo schema di relazione (non in BCNF):

APPEZZAMENTO1A PROP ID CONTEA APP ID AREA

con dipendenze:

P ROP ID → CON T EA AP P ID AREA CON T EA AP P ID → P ROP ID AREA AREA → CON T EA

(69)

& %

Un secondo esempio di normalizzazione - 2

Decomposizione in BCNF:

APPEZZAMENTO1A1 PROP ID APP ID AREA

con dipendenze:

P ROP ID → AP P ID AREA

APPEZZAMENTO1A2 AREA CONTEA

con dipendenze:

AREA → CON T EA

(70)

& %

BCNF e conservazione delle dipendenze

Decomposizione in BCNF di uno schema di relazione e

conservazione delle dipendenze non sono obiettivi che possano essere sempre raggiunti in modo congiunto

R A B C

con dipendenze:

A B → C C → B

(71)

& %

Normalizzazione di schemi in BCNF - 1

Un algoritmo esponenziale che preserva i dati, ma non le dipendenze, `e il seguente

algoritmo DECOMPOSIZIONE IN BCNF input RhT, F i con F copertura canonica

output ρ = {R1, . . . , Rm} decomposizione di R in BCNF che preserva i dati begin

ρ := {R1hT, F i}; n := 1;

while esiste RihTi, Fii ∈ ρ non in BCNF a causa di X → A do begin

n := n + 1;

T0 := X+; F0 := ΠT0(Fi); T00 := Ti − A; F00 := ΠT00(Fi);

ρ := (ρ \ RihTi, Fii) ∪ {RihT0, F0i, RnhT00, F00i}

end;

end

(72)

& %

Normalizzazione di schemi in BCNF - 2

La conservazione dei dati da parte dell’algoritmo precedente segue dal seguente teorema

Teorema. Sia ρ = {R1, . . . , Rm} una decomposizione di RhT, F i che preserva i dati (rispetto a F ) e sia σ = {S1, S2} una

decomposizione di R1 che preserva i dati (rispetto a ΠT1(F )).

Allora la decomposizione ρ0 = {S1, S2, R2, . . . , Rm} preserva i dati (rispetto a F )

Osservazione. Esistono anche algoritmi polinomiali di

decomposizione in BCNF, ma vengono poco utilizzati perch´e producono schemi poco naturali e fortemente decomposti

(73)

& %

Decomposizioni di schemi in 3NF - 1

Un algoritmo polinomiale che preserva i dati e le dipendenze

algoritmo DECOMPOSIZIONE IN 3NF input una relazione RhT, F i

output una decomposizione ρ = {R1, . . . , Rm} in 3NF che preserva i dati e le dipendenze

begin

Passo 1. Trova una copertura canonica G di F e poni ρ = ∅ Passo 2. Sostituisci in G ogni insieme di dipendenze X → A1, . . . , X → Ak con la dipendenza X → A1, . . . , Ak

Passo 3. Per ogni dipendenza X → Y ∈ G, inserisci uno schema con attributi XY in ρ (X `e detta chiave sintetizzata)

Passo 4. Elimina da ρ ogni schema contenuto in un altro

Passo 5. Se nessuno schema in ρ ha come insieme di attributi una superchiave di R, aggiungi uno schema con attributi W , con W chiave di R, a ρ

end

(74)

& %

Decomposizioni di schemi in 3NF - 2

Teorema. Dato uno schema RhT, F i, l’algoritmo proposto produce una decomposizione ρ = {R1, . . . , Rm} di R che preserva i dati e le dipendenze

Teorema. Dato uno schema RhT, F i, l’algoritmo proposto produce una decomposizione ρ = {R1, . . . , Rm} di R in schemi in 3NF

(rispetto alle proiezioni di F su Ti, con i = 1, . . . , m)

Riferimenti

Documenti correlati

In questi appunti daremo qualche cenno sulla classicazione delle soluzioni di una equazione

[r]

Matrice P di cambio di base, definizione come matrice le cui colonne sono le coordinate dei nuovi vettori di base nella vecchia base (per i no- stri esempi la base canonica).. , v n

Teorema - Sia data una popolazione numerica infinita di media µ e deviazione standard (scarto quadratico medio) σ da cui ven- gono estratti dei campioni casuali formati ciascuno da

[r]

Dopo aver definito il rango di una matrice, si dimostri che due matrici di Mat m,n (Q) sono equivalenti se e solo se hanno lo stesso rango... Ricordiamo che due matrici A, B

Analisi Matematica

Credi forse che sia tanto facile trovare un uomo o un cane o un altro essere qualunque molto grande o molto piccolo o, che so io, uno molto veloce o molto lento o molto brutto