2. inhoud
• decompositie: algoritmen en eigenschappen
• meerwaardige afhankelijkheden, 4e normaalvorm
• join-afhankelijkheden en 5e normaalvorm
3. verschillende benaderingen
1. via hoogniveau modellering (top-down)
– ER-schema bouwen
– ER-schema omzetten naar relationeel gegevensbankschema
– o.a. partiële en transitieve afhankelijkheden wegwerken
2. meteen een relationeel gegevensschema bouwen
(bottom-up)
– universeel schema met alle attributen
– technieken, algoritmes voor decompositie
4. decompositie:
algoritmen en eigenschappen
• Vertrek van 1 universele relatie R
– met schema SR = < UR, FR>
• Gewenst:
– decompositie (SR) = { SR1 , SR2 , ..., SRk } (met k > 1) zodat
• elke Ri in BCNF of 3NF is
• alle informatie behouden blijft
• alle functionele afhankelijkheden bewaard blijven
– Laatste 2 voorwaarden zijn niet zo evident!
5. behoud van informatie
• informatie blijft behouden
a.s.a.
oorspronkelijke relatie volledig gereconstrueerd kan
worden uit decompositie
• voorbeeld: EMP_LOCS en EMP_PROJ1
– oorspronkelijke relatie niet reconstrueerbaar:
join levert onechte tupels op
– dus geen volledig behoud van informatie
8. bewaren van afhankelijkheden
• functionele afhankelijkheden zijn intrarelationele restricties
– X Y: X en Y zijn attributenverz. van dezelfde relatie
• bij decompositie geven deze afhankelijkheden aanleiding tot:
– intrarelationele afhankelijkheden in Ri: URi(FR0)
• projectie van FR0 op URi :
enkel die X Y blijven over waarvoor X Y URi
– interrelationele afhankelijkheden
• deze zijn moeilijker te controleren door DBMS :
join nodig om na te gaan of nieuw toegevoegde tupels voldoen
9. Als INTER INTRA+, dan zeggen we dat
(SR) de afhankelijkheden van F bewaart
Def: Een decompositie (SR) = {SR1 , SR2 , ..., SRk} van R
bewaart de afhankelijkheden van R
indien
( UR1(FR) ... URk(FR) ) + = FR+
10. decompositie-algoritme 1
• algoritme voor afhankelijkheden-bewarende
decompositie naar 3NF:
1. zoek een minimale overdekking G voor F
2. voor elke X die ergens in G voorkomt in de linkerzijde van een
functionele afhankelijkheid:
maak een schema {X A1 A2 ... Am}
waarbij X A1, ..., X Am alle afhankelijkheden in G zijn met X
als linkerlid
3. plaats alle overblijvende attributen in een enkel relatieschema
Helaas: kan tot informatieverlies aanleiding geven
vb (probeer uit):
A B C D
13. decompositie
U
Emp_ssn Pno Esal Ephone Dno Pname Plocation
Minimale verzameling G
{Emp_ssn} {Esal, Ephone, Dno}
{Pno} {Pname, Plocation}
voor elke X die ergens in G voorkomt in de linkerzijde van een
functionele afhankelijkheid:
maak een schema {X A1 A2 ... Am}
waarbij X A1, ..., X Am alle afhankelijkheden in G zijn met X
als linkerlid
Emp_ssn Esal Ephone Dno Pno Pname Plocation
14. oefening
Stock
Model# Serial# Price Color Name Year
afhankelijkheden minimale verzameling
{M, S} {P, C} {M, S} {C}
{S} {Y} {S} {Y}
{M} {N} {M} {N}
{N,Y} {P} {N,Y} {P}
Model# Serial# Color Serial# Year
Model# Name Name Year Price
15. verliesloze decomposities
Def: Een decompositie SR) = {SR1 , SR2 , ..., SRk} is verliesloos
a.s.a.
voor elke toegestane extensie r van R (d.i. een extensie die
aan FR voldoet) geldt:
UR1(r) * ... * URk (r) = r
• m.a.w. join van relaties in decompositie levert geen
onechte tupels op (lossless of nonadditive join property)
• testen of een decompositie verliesloos is: d.m.v. het
"chase" algoritme
• Dé vraag is: kan elk tupel van de originele relatie R gereconstrueerd
worden op basis van de tupels in de decompositie?
16. het Chase-algoritme
• maakt gebruik van een matrix
– kolommen = alle attributen Aj van originele relatie R
– een rij per relatie Ri in de decompositie
• voor elke rij i:
– vul aj in op positie j als Aj in schema SRi voorkomt; anders bij
– de a's stellen de aanwezige waarden voor
• redenering:
– als X Y, en de waarden voor X zijn gelijk in 2 rijen, dan ook
die voor Y
– dit aanduiden in matrix
• doorgaan tot geen verandering meer optreedt
• 1 rij vol a's verliesloos
17. Algoritme: Test of decompositie D = {R1, ..., Rn} van een relatie R met
afhankelijkheden F verliesloos is:
maak een matrix S met 1 rij i voor elke relatie Ri in de decompositie D,
en 1 kolom j voor elk attribuut Aj in R
voor elke rij i :
voor elke kolom j :
als Aj als attribuut voorkomt in Ri dan Sij := aj anders Sij := bij
herhaal tot S niet meer verandert:
voor elke functionele afhankelijkheid X Y in F:
voor elke verzameling rijen V in S waarvoor geldt dat de
symbolen in de kolommen overeenkomend met X
dezelfde zijn:
{m.a.w. i1,i2 V: j | Aj X : Si1j=Si2j}
maak de symbolen in de kolommen van Y ook gelijk,
als volgt:
als een van de rijen in V een aj bevat dan
voor elke k in V: Skj := aj
anders
kies een i V
voor elke k in V: Skj := bij
{ D is verliesloos a.s.a. er een rij bestaat die enkel a's bevat }
18.
19.
20. eigenschappen van verliesloze decomposities
• Eigenschap LJ1:
Niet-additieve Join Test voor Binaire Decomposities
– (SR) = { SR1 , SR2 } is verliesloos t.o.v. F a.s.a.
(UR1 UR2) (UR1 UR2) F+
of
(UR1 UR2) (UR2 UR1) F+
– eenvoudiger test dan "chase" algoritme
– maar enkel toepasselijk op splitsing in 2 schema's
22. verliesloze decompositie van een
relatie R naar BCNF
:= {SR}
zolang er een relatieschema SRi in niet in BCNF is :
zoek een functionele afhankelijkheid X Y binnen SRi die
volgens BCNF niet toegelaten is
vervang SRi in door twee schema’s SRi Y en X Y :
:= {SRi} {SRi Y, X Y}
Afhankelijkheden kunnen nu verloren gaan!
23. voorbeeld van ontwerp via
decompositie
• Gegevensbank met info over huizen in een gemeente
• Universele relatie R1(O,S,H,P,W,B,D)
• UR1 = {O,S,H,P,W,B,D}
– O = identificatienr van huis
– S = straat
– H = huisnummer
– P = postcode
– W = wijk
– B = naam bouwmaatschappij
– D = directeur bouwmaatschappij
24. FR1 = { O BSH, B D, D B, SH OP, P S,
SW}
postcode (P)
id.nr (O) straatnaam (S) huisnr (H)
bouwmij (B)
wijk (W)
directeur (D)
25. voorbeeld van een extensie van R1
O S H P W B D
15351 Perenstraat 23 2745 DD Fruitwijk Bouwlust P. Akker
15352 Perenstraat 25 2745 DD Fruitwijk Bouwlust P. Akker
15788 Appelstraat 8 2745 EG Fruitwijk Solide Z. Glas
20371 Beukenstraat 94 2751 BE Bomenwijk Solide Z. Glas
20372 Beukenstraat 96 2751 BE Bomenwijk Solide Z. Glas
20167 Beukenstraat 1 2751 BB Bomenwijk Bouwlust P. Akker
Redundante gegevens
26. • Relatie is reeds in 1NF
• 3 kandidaatsleutels voor R1:
– O, SH, PH
– dus O,S,H,P zijn sleutelattributen van R1; W,B,D niet
• Is R1 in 2NF?
27. Is R1 in 2NF?
Idnr (O) Straat (S) Huisnummer(H) Postcode(P) Wijk (W) BouwM.(B) Directeur
= { O BSH, B D, D
B, SH OP, P S,
SW}
28. Is R1 in 2NF?
• Nee:
– W partieel afhankelijk van kand.sleutel SH
– SW
• Normalisatie:
• W uit R1 verwijderen, resulterend in
– R2 met UR2 = { O, S, H, P, B, D }
• en
– R20 maken met UR20 = { S, W }
29. voorbeeld
R2 Idnr (O) Straat (S) Huisnummer(H) Postcode(P) BouwM.(B) Directeur (D)
= { O BSH, B D, D
B, SH OP, P S,
SW}
R20 Straat (S) Wijk (W)
30. vorige voorbeeldextensie wordt nu
O S H P B D
15351 Perenstraat 23 2745 DD Bouwlust P. Akker
15352 Perenstraat 25 2745 DD Bouwlust P. Akker
15788 Appelstraat 8 2745 EG Solide Z. Glas
20371 Beukenstraat 94 2751 BE Solide Z. Glas
20372 Beukenstraat 96 2751 BE Solide Z. Glas
20167 Beukenstraat 1 2751 BB Bouwlust P. Akker
S W
Perenstraat Fruitwijk
Appelstraat Fruitwijk
Beukenstraat Bomenwijk
31. Alle relaties in 3NF?
R2 Idnr (O) Straat (S) Huisnummer(H) Postcode(P) BouwM.(B) Directeur (D)
= { O BSH, B D, D
B, SH OP, P S,
SW}
R20 Straat (S) Wijk (W)
32. Alle relaties in 3NF?
• R20: ja
• R2: nee
– transitieve afh. : D is trans. afh. van O via B
– afhankelijkheid B D (en D B) afsplitsen
• (SR2) = { SR3, SR30 } met
– UR3 = UR2 { D } = { O, S, H, P, B }
– UR30 = { B, D }
33. extensie volgens huidig
gegevensbankschema
– :
O S H P B
15351 Perenstraat 23 2745 DD Bouwlust
15352 Perenstraat 25 2745 DD Bouwlust
15788 Appelstraat 8 2745 EG Solide
20371 Beukenstraat 94 2751 BE Solide
20372 Beukenstraat 96 2751 BE Solide
20167 Beukenstraat 1 2751 BB Bouwlust
S W B D
Perenstraat Fruitwijk Bouwlust P. Akker
Appelstraat Fruitwijk Solide Z. Glas
Beukenstraat Bomenwijk
34. Alle relaties in BCNF?
kandidaatsleutels van R3: O, SH, PH
R3 Idnr (O) Straat (S) Huisnummer(H) Postcode(P) BouwM.(B)
= { O BSH, B D, D
B, SH OP, P S,
SW}
R20 Straat (S) Wijk (W)
R30 BouwM. (B) Directeur (D)
35. • Alle relaties nu in 3NF
• Ook in BCNF?
– R20 en R30 wel
– R3 niet
• kandidaatsleutels van R3: O, SH, PH
• sleutelattribuut S is transitief afh. van SH via P
• daarom P S weer afsplitsen naar extra relatie
36. uiteindelijke extensie van
gegevensbank F = { O BSH, B D, D B, SH
R1
OP, P S, S W }
O H P B P S
15351 23 2745 DD Bouwlust 2745 DD Perenstraat
15352 25 2745 DD Bouwlust 2745 EG Appelstraat
15788 8 2745 EG Solide 2751 BE Beukenstraat
20371 94 2751 BE Solide 2751 BB Beukenstraat
20372 96 2751 BE Solide
20167 1 2751 BB Bouwlust
S W
Perenstraat B D
Fruitwijk
Bouwlust P. Akker
Appelstraat Fruitwijk
Solide Z. Glas
Beukenstraat Bomenwijk
Welke afhankelijkheden zijn "verloren gegaan"?
m.a.w. welke restricties zijn nu moeilijker te controleren?
37. • We hebben nu
– verliesloze decompositie naar BCNF
– afhankelijkheden-behoudende decompositie naar 3NF
• Combinatie van beide mogelijk?
– m.a.w.: verliesloos en afhankelijkheden-behoudend
• Ja, maar enkel tot 3NF (BCNF niet steeds bereikbaar)
38. verliesloze en afhankelijkheden-
bewarende decompositie naar 3NF
• zelfde algoritme als voorheen voor afh.bewarende
decompositie, met één extra stap
1. zoek een minimale overdekking G voor F
2. voor elke X die ergens in G voorkomt in de linkerzijde van een
functionele afhankelijkheid:
maak een schema {X A1 A2 ... Am}
waarbij X A , ..., X Am
alle afhankelijkheden in G zijn met X als linkerlid
3. plaats alle overblijvende attributen in een enkel relatieschema
4. als geen van de relatieschema's een sleutel van R bevat
dan maak een extra relatieschema dat attributen bevat die een
sleutel voor R vormen
40. algoritme voor vinden van een sleutel
Input: universele relatie R en verzameling functionele afhankelijkheden F
(1) K := R
(2) Voor elk attribuut A in K
bereken (K – A)+ t.o.v. F
als (K – A)+ alle attributen van R bevat, dan K := K – {A}
41. oefening
• R(A, B, C, D, E)
• F = {AB C, CD E, DE B}
• Kandidaatsleutel?
(1) K := R
(2) Voor elk attribuut A in K
bereken (K – A)+ t.o.v. F
als (K – A)+ alle attributen van R bevat, dan K := K – {A}
42. nulwaarden kunnen problemen geven
• effect van nulwaarden op aggregaatfuncties?
• ook problematisch voor reconstructie van originele relatie
uit decompositie
– nulwaarden in verwijssleutels
– bv. 2 nieuwe werknemers, nog geen dept. DNUM = nul
– * op EMPLOYEE en DEPARTMENT vermeldt die werknemers niet
– worden “dangling tuples” genoemd
– deze gaan verloren bij (inwendige) join
– uitwendige join biedt oplossing
45. nadelen van decompositiemethode
• functionele afhankelijkheden moeten vooraf bekend zijn
– kan moeilijk zijn bij grote gegevensbanken met veel attributen
• de algoritmen zijn niet deterministisch
– minimale overdekking van F: meerdere oplossingen
– decompositie is afhankelijk van volgorde waarin f.a. bekeken
worden
• na decompositie (dure) joins nodig om originele info
terug te vinden
– kan performantie nadelig beïnvloeden
46. besluit
• methode niet blindelings toepassen
• combinatie van normalisatie en ER-ontwerp is
aangewezen
• voorbeeld:
– begin met (E)ER-model
– beeld af op relationeel model
– zoek functionele afhankelijkheden
– controleer of verdere decompositie wenselijk is
49. meervoudige afhankelijkheden
• meervoudige afhankelijkheden zijn een gevolg van 1NF
Course Teacher Text
Physics Green Mechanics
Brown Thermodynamics
Black
Math Algebra
white Geometry
• betekenis: elke docent gebruikt elke tekst
(onafhankelijkheid van Teacher en Text)
50. meervoudige afhankelijkheden
Course Teacher Text
Physics Green Mechanics
Physics Green Thermodynamics
Physics Brown Mechanics
Physics Brown Thermodynamics
Physics Black Mechanics
Physics Black Thermodynamics
Math White Algebra
Math White Geometry
In het voorbeeld: Course ->> Teacher en Course ->>Text
51. meerwaardige afhankelijkheden
• X bepaalt eenduidig een verzameling Y's ( "X
multidetermineert Y")
• welke Y's bij X horen hangt niet af van andere attributen
Def: Een attributenverzameling Y van een relatie R is meerwaardig
afhankelijk van een attributenverzameling X van R, genoteerd
X ->> Y,
a.s.a.
voor elke toegestane extensie r van R geldt :
als er 2 tupels t1 en t2 in r zijn zodat t1[X]=t2[X],
dan bestaan er twee tupels t3 en t4 in r zodat
t3[X] = t4[X] = t1[X] = t2[X] en
t3[Y] = t1[Y] en t4[Y] = t2[Y] en
t3[URXY] = t2[URXY] en t4[URXY] = t1[URXY]
52. meervoudige afhankelijkheden
• gegeven een relatie R, X en Y zijn deelverzamelingen van
attributen in R en Z= R – (X U Y)
• X ->> Y geldt als er 2 tupels t1 en t2 in r zijn zodat t1[X]=t2[X], dan
bestaan er twee tupels t3 en t4 in r zodat
– t3[X] = t4[X] = t1[X] = t2[X] en X Y Z
– t3[Y] = t1[Y] en t4[Y] = t2[Y] en t1 a b1 c1
– t3[Z] = t2[Z] en t4[Z] = t1[Z] t2 a b2 c2
t3 a b1 c2
t4 a b2 c1
54. voorbeeld
• T-shirts van bepaald model, met maat (S,M,L,XL) en
kleur
• Model ->> Maat betekent:
– elk model wordt in welbepaalde maten geleverd, onafhankelijk
van de kleur
– Dus als 1 model in kleuren blauw en grijs bestaat, en in maten M,
L, XL, betekent dit dat elke combinatie van maat en kleur
beschikbaar is
– Anders gezegd: elke combinatie van kleur en maat is mogelijk
• dus automatisch ook Model ->> Kleur
55. belang
• Als X meerdere attribuutverzamelingen
multidetermineert: combinatorische explosie!
• Voorbeeld
– om < x1, { a1,a2 } , { b1,b2,b3 } , { c1,c2,c3 } > voor te stellen
– 2 x 3 x 3 = 18 tupels nodig
• Daarom mwa's weren uit relaties 4NF
56. definitie van triviale mwa
• Merk op :
– X ->> UR X geldt steeds
Def: Een meerwaardige afhankelijkheid X->>Y in relatie R
is een triviale meerwaardige afhankelijkheid
a.s.a.
Y X of X Y = UR
58. vierde normaalvorm
Def: Een relatieschema SR = < U,F > is in de vierde
normaalvorm
a.s.a.
voor elke niet-triviale meerwaardige afhankelijkheid van
de vorm X->>Y van F+ geldt:
X is een supersleutel van R.
Belang van 4NF: vermijden van redundantie en anomalieën
59. (a) EMP relatie met MVDs: ENAME ->> PNAME en ENAME ->> DNAME
ENAME is geen supersleutel
(b) EMP geprojecteerd op EMP_PROJECTS en EMP_DEPENDENTS)
ENAME ->> PNAME en ENAME ->> DNAME zijn nu triviale MVDs
60. algoritme voor verliesloze
decompositie naar 4NF
• Merk op : garandeert geen behoud van
afhankelijkheden!
:= {R}
zolang er een relatieschema SRi in is dat niet in 4NF is :
zoek een niet-triviale mwa X->>Y binnen SRi die volgens
4NF niet toegelaten is;
vervang SRi in door twee relatieschema’s SRiY en X Y:
:= {S Ri} {S Ri Y, X Y}
61. (a) EMP relatie met MVDs: ENAME ->> PNAME en ENAME ->> DNAME
ENAME is geen supersleutel
(b) EMP geprojecteerd op EMP_PROJECTS en EMP_DEPENDENTS)
ENAME ->> PNAME en ENAME ->> DNAME zijn nu triviale MVDs
62. oefening
• breng relatie in 4NF
• Course ->> Teacher en Course ->>Text
Course Teacher Text
Physics Green Mechanics
Physics Green Thermodynamics
Physics Brown Mechanics
Physics Brown Thermodynamics
Physics Black Mechanics
Physics Black Thermodynamics
Math White Algebra
Math White Geometry
64. voorbeeld
Agent Company Product
Smith Ford truck
Smith GM car
Smith GM truck
Jones Ford car
65. voorbeeld
Er is geen verliesloze decompositie mogelijk in 2 relaties, want
Agent Company Agent Product
Smith Ford Smith car
Smith GM * Smith Truck
Jones Ford Jones car
=
Agent Company Product
Smith Ford car
Smith Ford truck
Smith GM truck
Smith GM Car
Jones Ford car
levert onechte tupels op
66. voorbeeld
En:
Agent Company Company Product
Smith Ford Ford car
Smith GM * Ford Truck
Jones Ford GM car
GM truck
=
Agent Company Product
Smith Ford car
Smith Ford truck
Smith GM truck
Smith GM Car
Jones Ford Car
Jones Ford truck
levert onechte tupels op
67. Join-afhankelijkheid
• Als dit het geval is, spreken we van een join
afhankelijkheid
• Voorbeeld
– als ( A = a en B = b ) samen voorkomen,
– en ( B = b en C = c ) komt voor,
– en ( A = a en C = c ) komt voor,
– dan komt ( A = a, B = b, C = c ) voor
• Voorbeeld 2
– als ( Agent = Jones en Company = Ford ) samen voorkomen,
– en ( Company = Ford en Product = Car ) komt voor,
– en ( Agent = Jones en Product = Car ) komt voor,
– dan komt ( Agent = Jones, Company = Ford, Product = Car ) voor
68. Def: Een join-afhankelijkheid JD(U1, ..., Un) in relatie R is een
restrictie die aangeeft dat voor elke extensie r van R geldt:
er is een verliesloze decompositie in relaties R1,...,Rn met attributen
U1, U2, ..., Un;
m.a.w. U1(r) U2(r) ... Un(r) = r
Voorbeeld
JD ({Agent, Company}, {Company, Product}, {Agent, Product})
voorwaarde voor het voorkomen van een combinatie is
strenger
69. voorbeeld
• aanbod van T-shirts met bepaald model, maat en kleur
voldoet aan volgende restrictie:
Model Maat Kleur
x y als dergelijke tupels
x z voorkomen in
y z een extensie van R...
x y z dan ook dit tupel
Dit is de join-afhankelijkheid
JD ( {Model,Maat} , {Maat,Kleur} , {Model,Kleur} )
Wat is het verschil met Model->>Maat ?
70. triviale JD
Def: Een join-afhankelijkheid JD(U1, ..., Un) in relatie R is een
triviale join-afhankelijkheid
a.s.a.
een van de Ui gelijk is aan UR.
Voorbeeld van triviale JD:
Model Maat Kleur
x y als dergelijke tupels
x z voorkomen in
een extensie van R...
x y z
dan ook dit tupel
x y z
71. vijfde normaalvorm
Def: Een relatieschema SR = <U,F> is in de vijfde normaalvorm
(of project-join-normaalvorm)
a.s.a.
voor elke niet-triviale join-afhankelijkheid JD(U1, ..., Un) van F+
geldt: U1 , ..., Un zijn allemaal supersleutels van R.
Methode om relatieschema naar 5NF te normaliseren:
voor elke JD() in FR+: splits R op volgens
Voorbeeld : T-shirts
UR = { Model, Maat, Kleur }
splits op in { Model, Maat }, { Maat, Kleur }, { Model, Kleur }
72. ander voorbeeld: relatie SUPPLY
• Leverancier (supplier) s levert onderdeel (part) p aan
project j
• restrictie:
– als leverancier s deel p kan leveren,
– en project j gebruikt onderdeel p,
– en leverancier s levert aan project j,
– dan levert s onderdeel p aan project j
• genoteerd:
– JD ( {SNAME, PARTNAME} , {SNAME,PROJNAME},
{PARTNAME, PROJNAME} )
73.
74. voorbeeld examenvraag
Gegeven de volgende relatie die gegevens bevat van koelkasten
REFRIG { ModelNr, Jaar, Prijs, Fabriek, Kleur }
met de functionele afhankelijkheden F:
– { ModelNr } { Fabriek }
– { ModelNr, Jaar } { Prijs }
– { Fabriek } { Kleur }
Gevraagd:
– Bepaal een kandidaatsleutel.
– In welke normaalvorm is de relatie REFRIG?
– Normaliseer REFRIG zover je kan en geef aan in welke normaalvorm
het resultaat is.