Dependențefuncționale Formele normale ale unei relațiidianat/BD_postuniv/curs/Curs3.pdfCurs 3...
Transcript of Dependențefuncționale Formele normale ale unei relațiidianat/BD_postuniv/curs/Curs3.pdfCurs 3...
Dependențe funcționale. Formele normale ale unei relații.
Curs 3
Exemplu: relaţia MovieList
• Constrângeri:• Fiecare film are un regizor
• Fiecare cinematograf are un număr de telefon
• Fiecare cinematograf începe proiecţia unui singur film al un moment dat
• Ce am putea alege ca si cheie primară?
Title Director Cinema Phone Time
The Hobbit Jackson Cinema City 441111 11:30
The Lord of the Rings3 Jackson Cinema City 441111 14:30
Adventures of Tintin Spielberg Odeon 442222 11:00
The Lord of the Rings3 Jackson Odeon 442222 14:00
War Horse Spielberg Odeon 442222 16:30
MovieList -> Anomalie de inserare
• Se poate insera următorul film?
INSERT INTO MovieList (Title,Director)
VALUES ('I.T.', 'Moore')
Title Director Cinema Phone Time
The Hobbit Jackson Cinema City 441111 11:30
The Lord of the Rings3 Jackson Cinema City 441111 14:30
Adventures of Tintin Spielberg Odeon 442222 11:00
The Lord of the Rings3 Jackson Odeon 442222 14:00
War Horse Spielberg Odeon 442222 16:30
MovieList -> Anomalie de ștergere
• Apare vreo problemă la următoarea operație de ștergere?
DELETE FROM MovieList
WHERE Director = 'Jackson'
Title Director Cinema Phone Time
The Hobbit Jackson Cinema City 441111 11:30
The Lord of the Rings3 Jackson Cinema City 441111 14:30
Adventures of Tintin Spielberg Odeon 442222 11:00
The Lord of the Rings3 Jackson Odeon 442222 14:00
War Horse Spielberg Odeon 442222 16:30
MovieList -> Anomalie de actualizare
• Apare vreo problemă la următoarea operație de actualizare?UPDATE MovieList
SET Phone = 441133
WHERE Title = 'The Hobbit' and Cinema = 'Cinema City'
Title Director Cinema Phone Time
The Hobbit Jackson Cinema City 441111 11:30
The Lord of the Rings3 Jackson Cinema City 441111 14:30
Adventures of Tintin Spielberg Odeon 442222 11:00
The Lord of the Rings3 Jackson Odeon 442222 14:00
War Horse Spielberg Odeon 442222 16:30
Anomalii
• Din cauza proiectării defectuase apar următoarele probleme:
• Anomalie de inserare – nu putem adăuga o înregistrare nouă, daca nu se cunosc toate câmpurile din cheia primară• Cauză: Amestecarea a două entități diferite în aceeași relație
• Anomalie de ștergere – dacă ștergem filmele regizorului Peter Jackson pierdem informațiile despre cinema Cinema City• Cauză: Amestecarea a două entități diferite în aceeași relație
• Anomalie de actualizare – schimbarea numărului de telefon pentru un cinema poate duce la inconsistențe• Cauză: Redundanță în relație
Scopul proiectării bazei de date
• Evitarea redundanței și a anomaliilor:• Pot insera date la fiecare entitate în parte
• Pot șterge date pentru o entitate (fără a afecta alte entități)
• Modificările care țin cont de cheile primare si străine nu pot duce la inconsistențe
Rafinarea unei structuri defectuoase
• Cum determinăm dacă o structură este “bună” sau ”defectuoasă”?
• Cum transformăm o structură defectuoasă într-una bună?
• Teoria dependenţelor funcţionale furnizează o abordare sistematică a celor două întrebări
Rafinarea unei structuri defectuoase prindescompunerea în mai multe structuri “bune”
Title Director
The Hobbit Jackson
The Lord of the Rings3 Jackson
Adventures of Tintin Spielberg
War Horse Spielberg
Cinema Phone
Cinema City 441111
Odeon 442222
Cinema Time Title
Cinema City 11:30 The Hobbit
Cinema City 14:30 The Lord of the Rings3
Odeon 11:00 Adventures of Tintin
Odeon 14:00 The Lord of the Rings3
Odeon 16:30 War Horse
MoviesCinema
Screens
Dependenţe funcţionale
A → B
A, B sunt submulţimi de atribute ale R
“A determină funcţional B”
sau
“B depinde functional de A”
Definiţie dependenţe funcţionale
• Dependenţa funcţională A → B este satisfăcută de R dacă şi numaidacă pentru orice instanţă a lui R, oricare două tupluri t1 şi t2 pentrucare valorile lui sunt identice vor avea de asemenea valori identicepentru B
• Fie A și B două submulțimi de atribute pentru relația R, 𝑡1, 𝑡2 tupluri din instanța r(R) și πA (𝑡1) proiecția înregistrării 𝑡1 pe mulțimea de atribute A.
A → B⇔ (∀𝑡1, 𝑡2 ∈ 𝑟 𝑅 : πA (𝑡1) = πA (𝑡2) ⇒ πB (𝑡1) = πB(𝑡2))
Definiţie dependenţe funcţionale
• Dependenţa funcţională A → B este satisfăcută de R dacă şi numai dacăpentru orice instanţă a lui R, oricare două tupluri t1 şi t2 pentru care valorilelui sunt identice vor avea de asemenea valori identice pentru B
• O dependenţă funcţională A → B este trivială dacă B ⊆ A
• O dependenţă funcţională A → B este totală/completă dacă eliminarea oricărui atribut din A are ca rezultat anularea dependenței• Adică nu există nici o submulțime C ⊆ A, astfel încât să aibă loc C → B
• O dependenţă funcţională A → B este parțială dacă există un atribut care poate fi eliminat din A şi totuşi dependenţa să se menţină.
Dependenţe funcţionale
• Ce dependențe funcționale puteți identifica?
Title Director Cinema Phone Time
The Hobbit Jackson Cinema City 441111 11:30
The Lord of the Rings3 Jackson Cinema City 441111 14:30
Adventures of Tintin Spielberg Odeon 442222 11:00
The Lord of the Rings3 Jackson Odeon 442222 14:00
War Horse Spielberg Odeon 442222 16:30
Dependenţe funcţionale
• Ce dependențe funcționale puteți identifica?• Title → Director• Cinema → Phone• Cinema, Time → Title (doar daca un cinema are o singură sală)
Title Director Cinema Phone Time
The Hobbit Jackson Cinema City 441111 11:30
The Lord of the Rings3 Jackson Cinema City 441111 14:30
Adventures of Tintin Spielberg Odeon 442222 11:00
The Lord of the Rings3 Jackson Odeon 442222 14:00
War Horse Spielberg Odeon 442222 16:30
Dependenţe funcţionale
• Atenție. Dependențele funcționale depinde de semantica schemei bazei de date, nu de instanța bazei de date!
Title Director Composer
Schindler’s List Spielberg Williams
Saving Private Ryan Spielberg Williams
North by Northwest Hitchcock Herrmann
Angela’s Ashes Parker Williams
Vertigo Hitchcock Herrmann
• Au loc următoarele dependențe funcționale?• Composer → Director ? • Director → Composer ?
Dependenţe funcţionale
Title Director Composer
Schindler’s List Spielberg Williams
Saving Private Ryan Spielberg Williams
North by Northwest Hitchcock Herrmann
Angela’s Ashes Parker Williams
Vertigo Hitchcock Herrmann
• Au loc următoarele dependențe funcționale?• Composer → Director ? – NU pentru ca e încălcată de instanță
• Director → Composer ? – instanța dată satisface dependența, dar asta NU înseamnă că dependența are loc în relația Movie!
Exemplu
Distribuitor ( Nume, AdresaDistribuitor, Produs, Pret)
• Cine ar putea fi cheia primară?
• Ce dependențe funcționale identificați?
Exemplu
Distribuitor ( NumeDistribuitor, AdresaDistribuitor, NumeProdus, PretProdus)
• Cine ar putea fi cheia primară? – (NumeDistribuitor, NumeProdus)
• Ce dependențe funcționale identificați?• NumeDistribuitor → AdresaDistribuitor
• NumeDistribuitor, NumeProdus → PretProdus
• NumeDistribuitor, NumeProdus → NumeProdus (trivială)
• NumeDistribuitor, NumeProdus → AdresaDistribuitor (parțială)
• NumeDistribuitor → NumeDistribuitor (trivială)
Superchei, chei & atribute prime
• Dacă C este o cheie pentru 𝑅(𝐴1,𝐴2,…,𝐴𝑛), atunci 𝐶 → 𝛽, ∀𝛽⊂{𝐴1,𝐴2,…,𝐴𝑛}. Deoarece o astfel de dependență este valabilă tot timpul, ea nu se va elimina prin descompuneri.
• Un atribut A se numeşte atribut prim dacă A face parte dintr-o cheie a lui R; în caz contrar, A se numeşte atribut neprim.
Descompunerea relaţiilor
• Descompunerea unei relaţii R este o mulţime de (sub)relaţii {R1, R2, ..., Rn} astfel încât:• fiecare Ri ⊆ R și
• R = ∪ Ri
• Dacă r este o instanţă din R, atunci r se descompune în {r1,r2,...,rn},unde fiecare ri= 𝜋Ri(r).
Descompunerea relaţiilor - Exemplu
• MovieList( Title, Director, Cinema, Phone, Time)
se descopume în:
• (Title, Director)
• (Cinema, Phone)
• (Cinema, Time, Title)
Proprietăţile descompunerii relaţiilor
1. Descompunerea trebuie să păstreze informaţiile – Descompunere cu joncțiune fără pierderi (Lossless-Join Decomposition)• Datele din relaţia originală = Datele din relaţiile descompunerii
• Crucial pentru păstrarea consistenţei datelor!
2. Descompunerea trebuie să respecte toate dependențele funcționale (DF)• Dependenţele funcţionale din relaţia originală = reuniunea dependenţelor
funcţionale din relaţiile descompunerii
• Facilitează verificarea violărilor DF
1. Descompunerea trebuie să păstrezeinformaţiile• Cu alte cuvinte putem reconstrui r prin jonctiunea (join) proiecțiilor
sale {r1,r2, ... ,rn}
• Descompunere cu joncțiune fără pierderi:
r = π𝑅1𝑟 ⋈… ⋈ π𝑅𝑛
𝑟
• Observație: daca {R1, …, Rn} e o descompunere a R, atunci pentru orice instanta r din R, avem
r ⊆ π𝑅1𝑟 ⋈… ⋈ π𝑅𝑛
𝑟
MovieList( Title, Director, Cinema, Phone, Time)
Title Director
The Hobbit Jackson
The Lord of the Rings3 Jackson
Adventures of Tintin Spielberg
War Horse Spielberg
Cinema Phone
Cinema City 441111
Odeon 442222
Cinema Time
Cinema City 11:30
Cinema City 14:30
Odeon 11:00
Odeon 14:00
Odeon 16:30
M3
M4
M2
Cinema Title
Cinema City The Hobbit
Cinema City The Lord of the Rings3
Odeon Adventures of Tintin
Odeon The Lord of the Rings3
Odeon War Horse
M1
M1 ⋈ M2 ⋈ M3 ⋈ M4
Title Director Cinema Phone Time
The Hobbit Jackson Cinema City 441111 11:30
The Hobbit Jackson Cinema City 441111 14:30
The Lord of the Rings3 Jackson Cinema City 441111 11:30
The Lord of the Rings3 Jackson Cinema City 441111 14:30
The Lord of the Rings3 Jackson Odeon 442222 11:00
The Lord of the Rings3 Jackson Odeon 442222 14:00
The Lord of the Rings3 Jackson Odeon 442222 16:30
Adventures of Tintin Spielberg Odeon 442222 11:00
Adventures of Tintin Spielberg Odeon 442222 14:00
Adventures of Tintin Spielberg Odeon 442222 16:30
...
Descompunere cu joncțiune fără pierderi
• Întrebarea 1: Cum determinăm dacă {R1, R2} este o descompunere cu joncţiuni fără pierderi a lui R?
• Întrebarea 2: Cum descompunem R în {R1, R2 }astfel încât aceasta e cu joncţiuni fără pierderi?
Descompunere cu joncțiune fără pierderi
• Întrebarea 1: Cum determinăm dacă {R1, R2} este o descompunere cu joncţiuni fără pierderi a lui R?
• Descompunerea lui R în {R1, R2} este cu joncţiuni fără pierderi dacă şinumai dacă are loc una din dependențele funcționale:• R1 ∩ R2 → R1 sau
• R1 ∩ R2 → R2
Descompunere cu joncțiune fără pierderi
• Întrebarea 2: Cum descompunem R în {R1, R2 } astfel încât aceasta e cu joncţiuni fără pierderi?
• Corolar: Dacă α → β este satisfăcută pe R şi α ∩ β = ∅, atuncidescompunerea lui R în {R – β, α ∪ β } este o descompunere cu joncţiuni fără pierderi.
Descompunere cu joncțiune fără pierderi -Exemplu• R(A,B,C) cu dependențele funcționale: F = {A → B}
• Descompunerea {AB, AC} e cu joncțiuni fără pierderi deoarece
• AB ∩ AC= A și A → AB
• Descompunerea {AB, BC} nu e cu joncțiuni fără pierderi deoareceAB ∩ BC = B și nici una din dependenţete B → AB sau B → BC nu sunt respectate de R
Descompunere cu joncțiune fără pierderi -Exemplu
A B C
a1 b1 c1
a2 b1 c2
A B C
a1 b1 c1
a2 b1 c2
A B
a1 b1
a2 b1
A C
a1 c1
a2 c2
r r1 r2 r1 ⋈ r2
A B C
a1 b1 c1
a2 b1 c2
A B C
a1 b1 c1
a1 b1 c2
a2 b1 c1
a2 b1 c2
A B
a1 b1
a2 b1
B C
b1 c1
b1 c2
r r1 r2 r1 ⋈ r2
Descompunere cu joncțiune fără pierderi
• Tranzitivitate:
Dacă {R1, R2} este o descompunere cu joncţiuni fără pierderi a lui R, şi dacă {R1_1, R1_2} e o descompunere cu joncţiuni fără pierderi a luiR1, atunci {R1_1, R1_2, R2} e o descompunere cu joncţiuni fără pierderi a R:
Title Director
The Hobbit Jackson
The Lord of the Rings3 Jackson
Adventures of Tintin Spielberg
War Horse Spielberg
Cinema Phone Time Title
Cinema City 441111 11:30 The Hobbit
Cinema City 441111 14:30 The Lord of the Rings3
Odeon 442222 11:00 Adventures of Tintin
Odeon 442222 14:00 The Lord of the Rings3
Odeon 442222 16:30 War Horse
MoviesScreens
Title Director Cinema Phone Time
The Hobbit Jackson Cinema City 441111 11:30
The Lord of the Rings3 Jackson Cinema City 441111 14:30
Adventures of Tintin Spielberg Odeon 442222 11:00
The Lord of the Rings3 Jackson Odeon 442222 14:00
War Horse Spielberg Odeon 442222 16:30
MovieList
Title Director
The Hobbit Jackson
The Lord of the Rings3 Jackson
Adventures of Tintin Spielberg
War Horse Spielberg
Cinema Phone Time Title
Cinema City 441111 11:30 The Hobbit
Cinema City 441111 14:30 The Lord of the Rings3
Odeon 442222 11:00 Adventures of Tintin
Odeon 442222 14:00 The Lord of the Rings3
Odeon 442222 16:30 War Horse
Movies Screens
Cinema Time Title
Cinema City 11:30 The Hobbit
Cinema City 14:30 The Lord of the Rings3
Odeon 11:00 Adventures of Tintin
Odeon 14:00 The Lord of the Rings3
Odeon 16:30 War Horse
Screens
Cinema Phone
Cinema City 441111
Odeon 442222
Cinema
Forme Normale
• Dependenţele funcţionale pot fi utilizate pentru identificareaproblemelor de proiectare şi sugerează posibile îmbunătăţiri
• Nicio DF (în afară de faptul ca orice atribut depinde de cheie):nu avemredundanţe
• Descompunerea trebuie folosită cu "măsură":• Este necesară o rafinare? Există motive de descompunere a relaţiei?
• Ce probleme pot rezulta prin descompunere?
Forme Normale
• Dacă o relaţie se află într-o formă normală particulară avem certitudinea căanumite categorii de probleme sunt eliminate/minimizate → ne ajută sădecidem daca descompunerea unei relaţii este necesară sau nu.
• Normalizare:• Fiecare relație corespunde unei singure entități (sau unei relații dintre două entități în
cazul modelării unui M:N)• Pe cât posibil nu apar redundanțe• Nu apar anomalii la operațiile de inserare, modificare, ștergere• Sunt definite și se respectă constrângerile (cheile primare, cheile străine)
• Obs. Soluția pentru normalizare este de obicei descompunerea relației, dar această descompunere trebuie obligatoriu să fie cu joncțiune fără pierderi
Forme Normale
• Formele normale bazate pe DF sunt:
• prima formănormală (1NF),
• a doua formă normală (2NF),
• a treia formă normală (3NF),
• forma normală Boyce-Codd (BCNF).
BCNF ⊆ 3NF ⊆ 2NF ⊆ 1NF
1NF
• Definiţie. O relaţie se află în Prima Formă Normală (1NF) dacă fiecareatribut al relaţiei poate avea doar valori atomice (deci listele şimulţimile sunt excluse)
(această condiţie este oarecum implicită conform definiţiei modeluluirelaţional)
1NF - Contraexemplu
ClientD LastName FirstName Product
K1 Nuhr Dieter S II
K2 Pelzig Erwin iPhone 5, iPad, Vaio
K3 Gruber Monika Nexus, Galaxy Tab, Kindle
Clients (ClientD, LastName, FirstName, Product)
Descompunere
Clients (ClientD, LastName, FirstName)ClientsProducts (ClientD, Product)
ClientD LastName FirstName
K1 Nuhr Dieter
K2 Pelzig Erwin
K3 Gruber Monika
ClientD Product
K1 S II
K2 iPhone 5
K2 iPad
K2 Vaio
K3 Nexus
K3 Galaxy Tab
K3 Kindle
2NF
• Spunem că avem o dependenţă funcţională parţială într-o relaţieatunci când un atribut neprim este dependent funcţional de o parte a cheii primare a relaţiei (dar nu de întreaga cheie).
• Definiţie. O relaţie se află în A Doua Formă Normală(2NF) dacă este1NF şi nu există un atribut neprim care depinde parţial de o cheie candidat.
• Adică orice atribut neprim depinde total/complet de orice cheie candidat a relației.
2NF – Contraexemplu
Exam (Student,Course, Teacher, Grade)
• Cheia primară: (Student, Course)
• Student, Course → Teacher e dependență parțiala
• Descompunere:• Enrolled (Student,Course, Grade)
• Courses (Course, Teacher)
3NF
• Definitie. O relaţie R ce satisface dependenţele funcţionale F se află în A Treia Formă Normală (3NF) dacă, pentru toate dependențele funcționale A → B din F+ (nu doar cele date, ci și cele care se pot deduce) are loc una din următoarele:• B ⊆ A (trivială), sau• A este o supercheie pentru R, sau• B este un atribut (sau o mulțime de atribute) prim.
• Definiție. O relaţie R se află în A Treia Formă Normală (3NF) dacă este în 2NF și nici un atribut neprim nu depinde tranzitiv de o cheie candidat.
• Descompunerea cu joncţiune fără pierderi & cu păstrarea dependenţelora relaţiei R într-o mulţime de relaţii 3NF este întotdeauna posibilă.
3NF - Contraexemplu
• Dissertation(Student, Title, Teacher, Department)
• Teacher → Department nu respectă nici una din condiții:• Teacher – nu e cheie
• Department – nu e atribut prim
• Dependența nu e trivială
• Descompunere:• Dissertation (Student, Title, Teacher)
• Teachers (Teacher, Department)
BCNF
• Definiţie. O relaţieR ce satisface dependenţele funcţionale F se află înForma Normală Boyce-Codd (BCNF) dacă, pentru toate dependențele funcționale A → B din F+ (nu doar cele date, ci și cele care se pot deduce) are loc una din următoarele:• B ⊆ A (trivială), sau• A este o supercheie pentru R
• R este în BCNF dacă singurele dependenţe funcţionale satisfăcute de R suntcele corespunzătoare constrângerilor de cheie.
• Dacă R este în BCNF, evident este şi în3NF.
• Dacă R este în3NF, este posibil să apară anumite redundanţe. Este un compromis, utilizat atunci când BCNF nu se poate atinge.
BCNF – Contraexemplu
• Schedule(Day, Route, Bus, Driver)
• Cheia primară: (Day, Route, Bus)
• Fiecare șofer are un autobuz asignat: Driver → Bus• Dependența nu respectă condițiile de BCNF
Forme Normale bazate pe DF1NF – toate valorile atributelor sunt atomice
2NF – toate atributele non-cheie depind de întreaga cheie (nu sunt dependenţe parţiale)
3NF – tabele în 2NF şi toate atributele non-prime depind doar de cheie (nu sunt depedenţe tranzitive)
BCNF – Toate dependenţele sunt date de chei
"Strategia" de normalizare
• BCNF prin descompunere cu joncţiune fără pierderi şi păstrareadependenţelor (prima alegere)
• 3NF prin descompunere cu joncţiune fără pierderi şi păstrareadependenţelor (a doua alegere)
Obs. Uneori dependenţele nu pot fi păstrate pentru a obţine BCNF.
Descompunerea în BCNF
• Fie relaţia R cu dependenţele funcţionale F. Dacă α → β nu respectăBCNF, descompunem R în:
R – β și α ∪ β.
• Aplicarea repetată a acestei idei va conduce la o colecţie de relaţiicare
• Sunt în BCNF;
• Conduc la joncţiune fără pierderi;
• Garantează terminarea.
Descompunerea în BCNF
• R(C, S , J, D, P, Q, V), C – cheie primară• F ={ JP → C, SD → P, J → S}• SD → P nu respectă BCNF ⇒ descompunem în (S,D,P) și (C,S,J,D,Q,V)• J → S nu respectă BCNF ⇒ (C,S,J,D,Q,V) se descompune în
(J, S) și (C, J, D, Q, V)• Descompunerea finală a lui R este (S,D,P) , (J, S) și (C, J, D, Q, V) – cu
joncțiune fără pierderi, dar fără a păstra dependențele
• Obs. În general, mai multe dependenţe pot cauza nerespectarea BCNF. Ordinea în care le “abordăm” poate conduce la decompuneri de relaţiicomplet diferite!
Descompunerea în BCNF
• În general, descompunerea în BCNF nu păstrează dependenţele.
• Exemplu. R(C, S, J, P, D, Q, V) descompus în (S, D, P), (J, S) şi (C, J, D, Q, V) nu păstrează dependenţele iniţiale {JP → C, SD → P, J → S}).
• ! Adăugând (J,P,C) la mulţimea de relaţii obţinem descompunere cu păstrarea dependenţelor.
BCNF & redundanţă
BCNF vs 3NF
• BCNF: joncţiune fără pierderi (posibil să nu păstreze dependenţele)
• 3NF: joncţiune fără pierderi& păstrare dependenţe
• R(Course, Teacher, Time) cu DF
Course → Teacher;
Teacher, Time → Course
• Chei: {Course, Time} şi {Teacher, Time}
• R este în 3NF dar nu în BCNF
• Descompunere BCNF:• R1(Course, Teacher), • R2(Course, Time)} este (doar) cu joncţiune fără pierderi
Descompunere
• Excesul poate fi nociv!
• Exemplu:
R = (Teacher,Dept,Phone,Office)
cu DF F = {Teacher → Dept, Phone, Office}
R = (Teacher,Dept,Phone,Office)
R1= (Teacher,Dept) R2= (Teacher,Phone) R3= (Teacher,Office)
• Uneori, din motive de performanţă se practică de-normalizarea