Normalisatie - deel 2
Upcoming SlideShare
Loading in...5
×
 

Normalisatie - deel 2

on

  • 4,800 views

 

Statistics

Views

Total Views
4,800
Views on SlideShare
4,501
Embed Views
299

Actions

Likes
2
Downloads
169
Comments
0

4 Embeds 299

https://cygnus.cc.kuleuven.be 231
http://www.slideshare.net 62
https://canis-major.cc.kuleuven.be 5
http://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-ShareAlike LicenseCC Attribution-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • Problemen die voorkomen bij normalisatie algoritmes

Normalisatie - deel 2 Normalisatie - deel 2 Presentation Transcript

  • normalisatie – deel 2 Katrien Verbert [email_address]
  • inhoud
    • decompositie: algoritmen en eigenschappen
    • meerwaardige afhankelijkheden, 4e normaalvorm
    • join-afhankelijkheden en 5e normaalvorm
    • inclusie-afhankelijkheden
    • andere afhankelijkheden en normaalvormen
  • verschillende benaderingen
    • 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
  • decompositie: algoritmen en eigenschappen
    • Vertrek van 1 universele relatie R
      • met schema S R = < U R , F R >
    • Gewenst:
      • decompositie  (S R ) = { S R1 , S R2 , ..., S Rk } (met k > 1) zodat
        • elke R i in BCNF of 3NF is
        • alle informatie behouden blijft
        • alle functionele afhankelijkheden bewaard blijven
      • Laatste 2 voorwaarden zijn niet zo evident!
  • 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
  •  
  • resultaat van natuurlijke join op de tuples boven de stippellijn: er worden onechte tupels ingevoerd
  • 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 R i :  URi (F R0 )
        • projectie van F R0 op U Ri :
        • enkel die X  Y blijven over waarvoor X  Y  U Ri
      • interrelationele afhankelijkheden
        • deze zijn moeilijker te controleren door DBMS :
        • join nodig om na te gaan of nieuw toegevoegde tupels voldoen
    • Verzameling intrarelationele afhankelijkheden F + van R geeft na decompositie tot
    •  (S R ) = { S R1 , S R2 , ..., S Rk }
    • aanleiding tot 2 verzamelingen restricties:
      • INTRA: intrarelationele afhankelijkheden
      • INTER: interrelationele afhankelijkheden
    • Als INTER  INTRA + , dan zeggen we dat
    •  (S R ) de afhankelijkheden van F bewaart
    Def : Een decompositie  (S R ) = {S R1 , S R2 , ..., S Rk } van R bewaart de afhankelijkheden van R indien (  UR1 (F R )  ...   URk (F R ) ) + = F R +
  • decompositie-algoritme 1
    • algoritme voor afhankelijkheden-bewarende decompositie naar 3NF:
    • Helaas: kan tot informatieverlies aanleiding geven
      • vb (probeer uit):
    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  A 1  A 2  ...  A m } waarbij X  A 1 , ..., X  A m alle afhankelijkheden in G zijn met X als linkerlid 3. plaats alle overblijvende attributen in een enkel relatieschema  A B C D
  • voorbeeld U Afhankelijkheden {Emp_ssn}  {Esal, Ephone, Dno} {Pno}  {Pname, Plocation} {Emp_ssn, Pno}  {Esal, Ephone, Dno, Pname, Plocation} Emp_ssn Pno Esal Ephone Dno Pname Plocation
  • minimale overdekking U
    • Afhankelijkheden
    • {Emp_ssn}  {Esal, Ephone, Dno}
    • {Pno}  {Pname, Plocation}
    • {Emp_ssn, Pno}  {Esal, Ephone, Dno, Pname, Plocation}
    • Kunnen we afhankelijkheden weglaten?
    Minimale overdekking {Emp_ssn}  {Esal, Ephone, Dno} {Pno}  {Pname, Plocation} {Emp_ssn, Pno} + ={Emp_ssn, Pno, Esal, Ephone, Dno, Pname, Plocation} Emp_ssn Pno Esal Ephone Dno Pname Plocation
  • decompositie U 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  A 1  A 2  ...  A m } waarbij X  A 1 , ..., X  A m alle afhankelijkheden in G zijn met X als linkerlid Emp_ssn Pno Esal Ephone Dno Pname Plocation
  • oefening Stock afhankelijkheden {M, S}  {P, C} {S}  {Y} {M}  {N} {N,Y}  {P} minimale verzameling {M, S}  {C} {S}  {Y} {M}  {N} {N,Y}  {P} Model# Serial# Price Color Name Year Model# Serial# Color Name Year Price Model# Name Serial# Year
  • verliesloze decomposities
    • 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 &quot;chase&quot; algoritme
    • Dé vraag is : kan elk tupel van de originele relatie R gereconstrueerd worden op basis van de tupels in de decompositie?
    Def : Een decompositie  S R ) = {S R1 , S R2 , ..., S Rk } is verliesloos a.s.a. voor elke toegestane extensie r van R (d.i. een extensie die aan F R voldoet) geldt:  UR1 (r) * ... *  URk (r) = r
  • het Chase-algoritme
    • maakt gebruik van een matrix
      • kolommen = alle attributen A j van originele relatie R
      • een rij per relatie R i in de decompositie
    • voor elke rij i:
      • vul a j in op positie j als A j in schema S Ri voorkomt; anders b ij
      • 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
  • Algoritme: Test of decompositie D = {R 1 , ..., R n } van een relatie R met afhankelijkheden F verliesloos is: maak een matrix S met 1 rij i voor elke relatie R i in de decompositie D, en 1 kolom j voor elk attribuut A j in R voor elke rij i : voor elke kolom j : als A j als attribuut voorkomt in R i dan S ij := a j anders S ij := b ij 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.  i 1 ,i 2  V:  j | A j  X : S i1j =S i2j } maak de symbolen in de kolommen van Y ook gelijk, als volgt: als een van de rijen in V een a j bevat dan voor elke k in V: S kj := a j anders kies een i  V voor elke k in V: S kj := b ij { D is verliesloos a.s.a. er een rij bestaat die enkel a's bevat }
  •  
  •  
  • eigenschappen van verliesloze decomposities
    • Eigenschap LJ1:
      • Niet-additieve Join Test voor Binaire Decomposities
      •  (S R ) = { S R1 , S R2 } is verliesloos t.o.v. F a.s.a.
      • eenvoudiger test dan &quot;chase&quot; algoritme
      • maar enkel toepasselijk op splitsing in 2 schema's
        • (U R1  U R2 )  (U R1 U R2 )  F +
        • of
        • (U R1  U R2 )  (U R2 U R1 )  F+
  • voorbeeld
    • U R = EMP_DEPT = {Ename, Ssn, Bdate, Address, Dnumber, Dname, Dmgr_ssn}
    • F= {Ssn  {Ename, Bdate, Address, Dnumber},
    • Dnumber  {Dname, Dmgr_ssn}}
    • U R1 = ED1 = {Ename, Ssn, Bdate, Address, Dnumber}
    • U R2 = ED2 = {Dnumber, Dname, Dmgr_ssn}
    • (U R1  U R2 )  (U R1 U R2 )  F + of (U R1  U R2 )  (U R2 U R1 )  F + ?
    • U R1  U R2 = {Dnumber}
    • U R1 - U R2 = {Ename, Ssn, Bdate, Address}
    • U R2 – U R1 = {Dname, Dmgr_ssn}
        • (U R1  U R2 )  (U R1 U R2 ) = Dnumber  Dname, Dmgr_ssn
        • Verliesloos!
    • Eigenschap LJ2:
      • opeenvolgende niet-additieve join decomposities
      • Als
        • decompositie  (S R ) = { S R1 , S R2 , ..., S Rm } van R verliesloos is t.o.v. F
        • en decompositie  1 (S Ri ) = { S Q1 , S Q2 , ..., S Qk } van R i verliesloos is t.o.v.  Ri (F)
      • Dan
        • is  2 (S R ) = { S R1 , ..., S Ri-1 , S Q1 , S Q2 , ..., S Qk , S Ri+1 , ..., S Rm } verliesloos t.o.v. F
    • Op basis van LJ1 en LJ2:
      • algoritme voor verliesloze decompositie naar BCNF
  • verliesloze decompositie van een relatie R naar BCNF  := {S R } zolang er een relatieschema S Ri in  niet in BCNF is : zoek een functionele afhankelijkheid X  Y binnen S Ri die volgens BCNF niet toegelaten is vervang S Ri in  door twee schema’s S Ri Y en X  Y :  :=  {S Ri }  {S Ri Y, X  Y} Afhankelijkheden kunnen nu verloren gaan!
  • voorbeeld van ontwerp via decompositie
    • Gegevensbank met info over huizen in een gemeente
    • Universele relatie R 1 (O,S,H,P,W,B,D)
    • U R1 = {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
      • F R1 = { O  BSH, B  D, D  B, SH  OP, P  S,
      • S  W }
    id.nr (O) wijk (W) directeur (D) bouwmij (B) huisnr (H) straatnaam (S) postcode (P)
  • voorbeeld van een extensie van R1 Redundante gegevens 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
    • Relatie is reeds in 1NF
    • 3 kandidaatsleutels voor R 1 :
      • O, SH, PH
      • dus O,S,H,P zijn sleutelattributen van R 1 ; W,B,D niet
    • Is R 1 in 2NF?
  • Is R 1 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,
      • S  W }
  • Is R 1 in 2NF?
    • Nee:
      • W partieel afhankelijk van kand.sleutel SH
      • S  W
    • Normalisatie:
    • W uit R 1 verwijderen, resulterend in
      • R 2 met U R2 = { O, S, H, P, B, D }
    • en
      • R 20 maken met U R20 = { S, W }
  • voorbeeld
    • Idnr (O) Straat (S) Huisnummer(H) Postcode(P) BouwM.(B) Directeur (D)
      • = { O  BSH, B  D, D  B, SH  OP, P  S,
      • S  W }
    Straat (S) Wijk (W) R2 R20
  • 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
  • Alle relaties in 3NF?
    • Idnr (O) Straat (S) Huisnummer(H) Postcode(P) BouwM.(B) Directeur (D)
      • = { O  BSH, B  D, D  B, SH  OP, P  S,
      • S  W }
    Straat (S) Wijk (W) R2 R20
  • 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 }
  • 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 Perenstraat Fruitwijk Appelstraat Fruitwijk Beukenstraat Bomenwijk B D Bouwlust P. Akker Solide Z. Glas
  • Alle relaties in BCNF?
    • Idnr (O) Straat (S) Huisnummer(H) Postcode(P) BouwM.(B)
      • = { O  BSH, B  D, D  B, SH  OP, P  S,
      • S  W }
    Straat (S) Wijk (W) R3 R20 BouwM. (B) Directeur (D)
        • kandidaatsleutels van R 3 : O, SH, PH
    R30
    • Alle relaties nu in 3NF
    • Ook in BCNF?
      • R 20 en R 30 wel
      • R 3 niet
        • kandidaatsleutels van R 3 : O, SH, PH
        • sleutelattribuut S is transitief afh. van SH via P
        • daarom P  S weer afsplitsen naar extra relatie
  • uiteindelijke extensie van gegevensbank Welke afhankelijkheden zijn &quot;verloren gegaan&quot;? m.a.w. welke restricties zijn nu moeilijker te controleren? O H P B 15351 23 2745 DD Bouwlust 15352 25 2745 DD Bouwlust 15788 8 2745 EG Solide 20371 94 2751 BE Solide 20372 96 2751 BE Solide 20167 1 2751 BB Bouwlust F R1 = { O  BSH, B  D, D  B, SH  OP, P  S, S  W } S W Perenstraat Fruitwijk Appelstraat Fruitwijk Beukenstraat Bomenwijk B D Bouwlust P. Akker Solide Z. Glas S P Perenstraat 2745 DD Appelstraat 2745 EG Beukenstraat 2751 BE Beukenstraat 2751 BB
    • 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)
  • 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  A 1  A 2  ...  A m } waarbij X  A  , ..., X  A m 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
  • voorbeeld U Afhankelijkheden {Emp_ssn}  {Esal, Ephone, Dno} {Pno}  {Pname, Plocation} {Emp_ssn, Pno}  {Esal, Ephone, Dno, Pname, Plocation} 2 4 Emp_ssn Pno Esal Ephone Dno Pname Plocation Emp_ssn Esal Ephone Dno Pno Pname Plocation Emp_ssn Pno Minimale overdekking {Emp_ssn}  {Esal, Ephone, Dno} {Pno}  {Pname, Plocation} 1
  • 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}
  • 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}
  • 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
  •  
  • natuurlijke join left outer join
  • 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
  • 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
  •  
  • MEERWAARDIGE AFHANKELIJKHEDEN EN VIERDE NORMAALVORM
  • meervoudige afhankelijkheden
    • meervoudige afhankelijkheden zijn een gevolg van 1NF
    • betekenis: elke docent gebruikt elke tekst (onafhankelijkheid van Teacher en Text)
    Course Teacher Text Physics Green Brown Black Mechanics Thermodynamics Math white Algebra Geometry
  • meervoudige afhankelijkheden
    • In het voorbeeld: 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
  • meerwaardige afhankelijkheden
    • X bepaalt eenduidig een verzameling Y's ( &quot;X multidetermineert Y&quot;)
    • 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 t 1 en t 2 in r zijn zodat t 1 [X]=t 2 [X], dan bestaan er twee tupels t 3 en t 4 in r zodat t 3 [X] = t 4 [X] = t 1 [X] = t 2 [X] en t 3 [Y] = t 1 [Y] en t 4 [Y] = t 2 [Y] en t 3 [U R XY] = t 2 [U R XY] en t 4 [U R XY] = t 1 [U R XY]
  • 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
      • t3[Y] = t1[Y] en t4[Y] = t2[Y] en
      • t3[Z] = t2[Z] en t4[Z] = t1[Z]
    X Y Z t1 a b 1 c 1 t2 a b 2 c 2 t3 a b 1 c 2 t4 a b 2 c 1
  • voorbeeld ENAME ->> PNAME en ENAME ->> DNAME
  • 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
  • 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
  • definitie van triviale mwa
    • Merk op :
      • X ->> U R 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 = U R
  • voorbeeld ENAME ->> PNAME en ENAME ->> DNAME
  • vierde normaalvorm Def : Een relatieschema S R = < 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
  • (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
  • algoritme voor verliesloze decompositie naar 4NF
    • Merk op : garandeert geen behoud van afhankelijkheden!
     := {R} zolang er een relatieschema S Ri in  is dat niet in 4NF is : zoek een niet-triviale mwa X->>Y binnen S Ri die volgens 4NF niet toegelaten is; vervang S Ri in  door twee relatieschema’s S Ri Y en X  Y:  :=  {S Ri }  {S Ri Y, X  Y}
  • (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
  • 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
  • JOIN-AFHANKELIJKHEDEN EN VIJFDE NORMAALVORM
  • voorbeeld Agent Company Product Smith Ford truck Smith GM car Smith GM truck Jones Ford car
  • voorbeeld Er is geen verliesloze decompositie mogelijk in 2 relaties, want * = levert onechte tupels op Agent Company Product Smith Ford car Smith Ford truck Smith GM truck Smith GM Car Jones Ford car Agent Product Smith car Smith Truck Jones car Agent Company Smith Ford Smith GM Jones Ford
  • voorbeeld En: * = levert onechte tupels op Agent Company Product Smith Ford car Smith Ford truck Smith GM truck Smith GM Car Jones Ford Car Jones Ford truck Company Product Ford car Ford Truck GM car GM truck Agent Company Smith Ford Smith GM Jones Ford
  • 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
    • Voorbeeld
    • JD ({Agent, Company}, {Company, Product}, {Agent, Product})
    • voorwaarde voor het voorkomen van een combinatie is strenger
    Def : Een join-afhankelijkheid JD(U 1 , ..., U n ) in relatie R is een restrictie die aangeeft dat voor elke extensie r van R geldt: er is een verliesloze decompositie in relaties R 1 ,...,R n met attributen U 1 , U 2 , ..., U n ; m.a.w.  U1 (r)   U2 (r)  ...   Un (r) = r
  • voorbeeld
    • aanbod van T-shirts met bepaald model, maat en kleur voldoet aan volgende restrictie:
    als dergelijke tupels voorkomen in een extensie van R... dan ook dit tupel Dit is de join-afhankelijkheid JD ( {Model,Maat} , {Maat,Kleur} , {Model,Kleur} ) Wat is het verschil met Model->>Maat ? Model Maat Kleur x y x z y z x y z
  • triviale JD Def : Een join-afhankelijkheid JD(U 1 , ..., U n ) in relatie R is een triviale join-afhankelijkheid a.s.a. een van de U i gelijk is aan U R . als dergelijke tupels voorkomen in een extensie van R... dan ook dit tupel
    • Voorbeeld van triviale JD:
    Model Maat Kleur x y x z x y z x y z Def : Een join-afhankelijkheid JD(U 1 , ..., U n ) in relatie R is een triviale join-afhankelijkheid a.s.a. een van de U i gelijk is aan U R .
  • vijfde normaalvorm
    • Methode om relatieschema naar 5NF te normaliseren:
      • voor elke JD(  ) in F R + : splits R op volgens 
    • Voorbeeld : T-shirts
      • U R = { Model, Maat, Kleur }
      • splits op in { Model, Maat }, { Maat, Kleur }, { Model, Kleur }
    Def : Een relatieschema S R = <U,F> is in de vijfde normaalvorm (of project-join-normaalvorm) a.s.a. voor elke niet-triviale join-afhankelijkheid JD(U 1 , ..., U n ) van F + geldt: U 1 , ..., U n zijn allemaal supersleutels van R.
  • 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} )
  •  
  • inclusie-afhankelijkheden
    • Relaties
      • R met S R = < U R ,F R >
      • en S met S S = <U S ,F S >
    • inclusie-afhankelijkheid R.X < S.Y geldt,
      • als voor elke instantie r van R en s van S moet gelden:
      •  X (r)   Y (s)
    • modelleert
      • referentiële integriteitsbeperkingen
      • superklasse/subklasse relatie
    • afleidingsregels
      • reflexiviteit, attribuutcorrespondentie, transiviteit
      • gezond en volledig
    • nog geen normaalvorm voorgesteld
  • voorbeelden
    • referentiële integriteitsconstraints
      • DEPARTEMENT.Dmgr_ssn < EMPLOYEE.Ssn
      • EMPLOYEE.Dnumber < DEPARTEMENT.Dnumber
    • Superklasse/subklasse constraints
      • EMPLOYEE.Ssn < PERSON.Ssn
      • STUDENT.Ssn < PERSON.Ssn
  • andere afhankelijkheden en normaalvormen
    • afhankelijkheden kunnen voorgesteld worden d.m.v. sjablonen (templates)
      • tupel-genererende sjablonen
        • als deze tupels voorkomen, dan ook ...
      • restrictie-genererende sjablonen
        • conclusie = voorwaarde op bestaande tupels
    • reeds gebruikt bij JD
    • nog voorbeelden: sjablonen voor f.a., m.w.a., i.a.
  • X  Y X ->> Y R.X < S.Y
  •  
  • domain-key normaalvorm
    • afhankelijkheden kunnen van zeer verscheiden aard zijn
      • vb.: &quot;leeftijd  23 => loon  30000&quot;
    • overzicht van beschouwde afhankelijkheden:
      • F: funct. afh.
      • M: meerw.afh.
      • J: join-afh.
      • I: inclusie-afh.
      • G: algemene (general) afh
    F M J G I
    • Algemene afhankelijkheden omvatten eender welke restricties
      • zowel statica- als dynamicaregels
      • domeinrestricties, sleutelafhankelijkheden, niet-sleutelafhankelijkheden, ...
    • Definitie van DKNF als &quot;ideale&quot; normaalvorm
      • alle restricties eenvoudig te controleren
    Def : Een relatieschema S R =<U,F> is in de domain-key-normaalvorm (DKNF) a.s.a. voor elke algemene afhankelijkheid G van F + geldt: G wordt geïmpliceerd door de domeinrestricties en de sleutelafhankelijkheden van R.
    • als gegevensbank in DKNF is:
      • geen onderhoudsproblemen t.o.v. toevoegen, verwijderen, wijzigen van gegevens
    • eerder theoretisch dan praktisch bruikbaar
      • geen methode bekend om DKNF te bereiken voor eender welke gegevensbank
      • afhankelijkheden kunnen willekeurig ingewikkeld zijn
  • voorbeeld
    • relatie met afhankelijkheid &quot;leeftijd  23  loon  30000&quot; in DKNF brengen:
    • kan door fragmentatie (ook wel horizontale decompositie genoemd)
    • relatie WERKNEMER ( Nr, Loon, Leeftijd )
      • dom( Nr ) = { k | k geheel en 1  k  999999}
      • dom( Loon ) = { l | l geheel en l  20 000}
      • dom( Leeftijd ) = { m | m geheel en 16  m  65}
      • Nr  Loon; Nr  Leeftijd; &quot;leeftijd  23  loon  30 000&quot;
    • om te normaliseren:
      • splits WERKNEMER op in JUNIOR en SENIOR
    • JUNIOR ( Nr, Loon, Leeftijd )
      • dom ( Nr ) = { k | k geheel en 1  k  999999}
      • dom ( Loon ) = { l | l geheel en l  20 000}
      • dom ( Leeftijd ) = { m | m geheel en 16  m  22}
      • Nr  { Leeftijd, Loon }
    • SENIOR ( Nr, Loon, Leeftijd )
      • dom ( Nr ) = { k | k geheel en 1  k  999999}
      • dom ( Loon ) = { l | l geheel en l  30 000}
      • dom ( Leeftijd ) = { m | m geheel en 23  m  65}
      • Nr  { Leeftijd, Loon }
    • Opmerking:
      • wat als Nr een sleutel is? ( controle op dubbels )
  • VRAGEN?