De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Databases I (H.14) Functionele Afhankelijkheden en Normaalvormen Wiebren de Jonge Vrije Universiteit, Amsterdam versie 2003.

Verwante presentaties


Presentatie over: "Databases I (H.14) Functionele Afhankelijkheden en Normaalvormen Wiebren de Jonge Vrije Universiteit, Amsterdam versie 2003."— Transcript van de presentatie:

1 Databases I (H.14) Functionele Afhankelijkheden en Normaalvormen Wiebren de Jonge Vrije Universiteit, Amsterdam versie 2003

2 De rest van de colleges DB I  (komende  3 college-weken) Meer over relationeel database design: –functionele afhankelijkheden –normaalvormen –dependency preserving opsplitsing –lossless join eigenschap –diverse praktische aspecten Database design is meer dan alleen ‘naïeve’ (E)ER-mapping  (daarna  2 college-weken) Enkele technische aspecten van belang voor een DMBS, i.e. een (zeer beperkt) kijkje ‘onder de motorkap’ van een DBMS –opslagstructuren, query optimizing, transactions, recovery,...

3 Introductie Normaliseren (1/5)

4 Introductie Normaliseren (2/5)

5 Introductie Normaliseren (3/5)

6 Introductie Normaliseren (4/5)

7 Introductie Normaliseren (5/5)

8 Data dependencies (gegevensafhankelijkheden)  data dependencies zijn (specifieke soorten van) constraints; omvat o.a.: –functional dependencies (FD, functionele afh.) –multi-valued dependencies (MVD, meerwaardige afh.) –join dependencies (JD, join-afh.)  redundantie  ‘update anomalies’ –o.a. vanwege potentiële inconsistentie –update: modification, insertion, deletion

9 FD’s (functionele afhankelijkheden)  gegeven: –een database-schema D met attributen A 1, A 2, …, A n –X  {A 1, A 2, …, A n } en Y  {A 1, A 2, …, A n }  Y is functioneel afhankelijk van X (notatie: X  Y) d.e.s.d. als bij een bepaalde waarde voor (de combinatie) X steeds precies één waarde hoort voor (de combinatie) Y  Als de attributen van X en Y in één relatie R voorkomen: Y is functioneel afhankelijk van X(notatie: X  Y) d.e.s.d. als voor elke mogelijke, toegestane inhoud van R geldt:  t 1,t 2  R: (t 1 [X] = t 2 [X])  (t 1 [Y] = t 2 [Y]) (Evt. is R de ‘universele relatie’)

10 Voorbeeld FD’s (1/4) Gegeven de volgende extensie van relatie R: R ABC aei afi bgk cgk Gelden in R de volgende functionele afhankelijkheden:  A  B ?Antwoord: Nee  B  C ?Antwoord: Misschien !!

11 Voorbeeld FD’s (2/4) Gegeven de volgende extensie van een relatie: EMP ENRNAME BDATE DNR E1John D1 E2Joe D1 E3Jack D1 E4Will D2 E5Bridget D2 Beantwoord op basis van de gegeven extensie of in EMP de volgende functionele afhankelijkheden gelden:  ENR  NAME ?Antwoord: Misschien  DNR  NAME ?Antwoord: Nee  BDATE  NAME ?Antwoord: Misschien

12 Functionele afhankelijkheden  Een functionele afhankelijkheid is een constraint  Of voldaan wordt aan een constraint is (mede) afhankelijk van de betekenis van de gegevens  Het is niet genoeg als een constraint in één extensie opgaat, vereist is dat hij in elke extensie opgaat!  Een functionele afhankelijkheid is daarmee een eigenschap van de intensie (van de DB of relatie)

13 Voorbeeld FD’s (3/4) Gegeven de relatie EMPLOYEE (ENR, NAME, BDATE, DNR), waarbij de 4 attributen resp. het personeelsnummer, de naam en de geboortedatum van een werknemer betreffen, en de afdeling waarvoor hij/zij werkt en waarbij geldt dat het personeelsnummer uniek is voor een werknemer. Gelden de volgende functionele afhankelijkheden?  ENR  NAMEAntwoord: Ja  DNR  NAMEAntwoord: Vrijwel zeker niet  BDATE  NAMEAntwoord: Vrijwel zeker niet N.B.: bij deze beantwoording kennis gebruikt over bedrijven i.h.a.

14 Voorbeeld FD’s (4/4) Gegeven de volgende extensie van een relatie die van werknemers hun personeelsnummer, naam en geboortedatum weergeeft en de afdeling waarvoor hij/zij werkt: EMP ENRNAME BDATE DNR E1John D1 E2Joe D1 E3Jack D1 E4Will D2 E5Bridget D2 Gelden de volgende functionele afhankelijkheden?  ENR  NAME Antwoord: Ja  DNR  NAME Antwoord: Nee  BDATE  NAME Antwoord: Nee / Misschien (met / zonder gebruik extra kennis)

15 Notatie Zij F een verzameling FD’s, dan notatie:  F |= X  Y  def “X  Y is logisch afleidbaar uit F”, i.e. “als alle FD’s uit F gelden, dan geldt ook X  Y”  F +  def { X  Y | F |= X  Y}

16 Keys / sleutels Als gegeven: –een relatieschema R met attributen A 1, A 2, …, A n –een verzameling functionele afhankelijkheden F –een verzameling X  {A 1, A 2, …, A n } dan geldt: X is een sleutel van R d.e.s.d. als: 1) X  A 1 A 2 …...A n  F + èn (identificatie) 2)  Y: Y  X  Y  X  (Y  A 1 A 2 …...A n  F + ) (minimaliteit) Notaties: a) hier nu gebruikt: ABC  def { A, B, C } = { B, A, C } b) straks ook nog: XY  def X  Y

17 ‘Sleutelbegrippen’ :-) Begrippen:  key  superkey (wel identificatie, geen minimaliteit vereist)  candidate key (elke echte sleutel)  primary key (één uitverkozen sleutel)  alternate/alternative key (alle overige sleutels) N.B.: gebruik niet, zoals in boek, de verwarrende benaming ‘secondary key’; met deze laatste term wordt i.h.a. een ‘secondary search key’ bedoeld.

18 Armstrong’s Afleidingsregels (=AA) Gegeven: de verzameling U van alle attributen in DB-schema D  als Y  X  U, dan X  Y(reflexiviteit)  als X  Y èn Z  U, dan XZ  YZ(augmentatie)  als X  Y èn Y  Z, dan X  Z(transitiviteit) Armstrong’s afleidingsregels zijn gezond(later: ook volledig) Idee achter bewijs ‘gezondheid’ van transitiviteit: Stel, t 1 [X] = t 2 [X] voor twee willekeurige tupels t 1 en t 2. Uit X  Y volgt dan dat t 1 [Y] = t 2 [Y]. Uit Y  Z volgt dan dat t 1 [Z] = t 2 [Z]. Dus, als t 1 [X] = t 2 [X] dan ook t 1 [Z] = t 2 [Z] (d.w.z. X  Z) Hierbij: tupels uit relatie of uit ‘universele relatie’ (  def cart. produkt van alle rel.’s)

19 Andere veel gebruikte afleidingsregels  als X  Y èn Z  Y, dan X  Z (decompositie)  als X  Y èn X  Z, dan X  YZ (vereniging)  als X  Y èn WY  Z, dan WX  Z (pseudo-transiviteit) Bewijs verenigingsregel m.b.v. AA (= Armstrong’s Afleidingsregels) : 1)X  Y(gegeven) 2)X  Z(gegeven) 3)X  YX(augmentatie van 1 met X; augmentatie met Z geeft XZ  YZ, dus met X geeft X  YX) 4)XY  ZY(augmentatie van 2 met Y) 5)X  YZ(transitiviteit op 3 en 4; YX = XY en ZY=YZ)

20 Logisch afl.baar vs. AA-afl.baar (“|– vs. |=”)  notatie: a) F |– X  Y  def X  Y is AA-afleidbaar uit F ( i.e. afleidbaar uit F m.b.v. Armstrong’s Afl.regels) b) X + F  def { A | F |– X  A}  m.b.v. decompositie-regel, verenigingsregel en de definitie van X + F is afleidbaar: hulpstelling:F |– X  Y  Y  X + F (*)  m.b.v. (*): Armstrong’s Afl.regels zijn volledig, d.w.z. “|–  |=”  al gezien: Armstrong’s Afl.regels zijn gezond, d.w.z. “|–  |=”

21 Gezond en volledig, i.e. “|–  |=” Omdat Armstrong’s afleidingsregels gezond en volledig zijn, m.a.w. omdat “|–  |=”, geldt nu dus ook:  X + F  def { A | F |– X  A } = { A | F |= X  A }  F +  def { X  Y | F |= X  Y} = { X  Y | F |– X  Y}  F |= X  Y  Y  X + F (**) (vgl. met hulpstelling)

22 Vier keer hetzelfde  X  Y  F + (m.b.v. definitie van F + )  F |= X  Y (m.b.v. “|-  |=”)  F |– X  Y (volgens hulpstelling afgeleid uit def. X + F )  Y  X + F N.B.:F +  def { X  Y | F |= X  Y} X + F  def { A | F |– X  A}

23 Berekening van F + is i.h.a. ondoenlijk Gegeven: – DB met slechts 3 attributen: A, B en C – F =  Gevraagd: bereken F + F + = {A  A, B  B, C  C, AB  A, AB  B, AB  AB, BC  B, BC  C, BC  BC, AC  A, AC  C, AC  AC, ABC  A, ABC  B, ABC  C, ABC  AB, ABC  BC, ABC  AC, ABC  ABC} Hier zit dus heel erg veel werk aan vast...(al gauw ondoenlijk)

24 F  G(1/2)  Definitie: F  G (i.e. F en G equivalent) d.e.s.d. als F + = G +  Gegeven: R met attributen A, B en C F = {A  B, B  C, C  A} G = {A  C, C  B, B  A} Geldt hier dan F  G ? Eerste aanpak: bereken F + en G +. F + = {A  A,B  A,C  A, AB  A,BC  A,AC  A,ABC  A A  B,B  B,C  B, AB  B,BC  B,AC  B,ABC  B A  C,B  C,C  C, AB  C,BC  C,AC  C,ABC  C A  AB,B  AB,C  AB, AB  AB,BC  AB,AC  AB,ABC  AB A  BC,B  BC,C  BC, AB  BC,BC  BC,AC  BC,ABC  BC A  AC,B  AC,C  AC, AB  AC,BC  AC,AC  AC,ABC  AC A  ABC,B  ABC, C  ABC, AB  ABC, BC  ABC, AC  ABC, ABC  ABC} Hier zit dus heel erg veel werk aan vast... (i.h.a. ondoenlijk)

25 F  G(2/2) Het kan ook slimmer / eenvoudiger:  merk op: F + = G +  F +  G +  G +  F +  hulpstelling: G +  F +  G  F + bewijs: “  ”: triviaal (m.b.v. def. van afsluiting) “  ”: voor elke G en H geldt: G  H  G +  H + ; neem nu H = F +, dan krijg je dus: G  F +  G +  (F + ) +, maar (F + ) + = F + (m.b.v. def. van afsluiting)  G  F + kan getest worden zonder F + uit te rekenen, n.l. door voor iedere X  Y  G te testen of Y  X + F. Immers, omdat Y  X + F  F |= X  Y  X  Y  F + testen we dan voor iedere X  Y  G of geldt X  Y  F +.  idem dito*: F  G + testen zonder G + uit te rekenen.

26 Voorbeeld B +  gegeven: F = {A  B, B  C, C  A}  wat is nu B + F ? B + F = {B, C, A} = BCA = ABC Algoritme 14.1 boek: X + := X; repeat oldX + := X + ; for each FD Y  Z  F do if Y  X + then X + := X +  Z; until (X + = oldX + ) (na afloop bevat X + precies X + F )

27 Terug naar ons voorbeeld: F  G ?  gegeven: –R met attributen A, B en C –F = {A  B, B  C, C  A} –G = {A  C, B  A, C  B} geldt hier F  G ? geldt F  G + ? - A  B  G + ?A + G = ABC,dus B  A + G, dus OK - B  C  G + ?B + G = ABC,dus C  B + G, dus OK - C  A  G + ?C + G = ABC,dus A  C + G, dus OK geldt G  F + ? - A  C  F + ?A + F = ABC,dus C  A + F, dus OK - B  A  F + ?B + F = ABC,dus A  B + F, dus OK - C  B  F + ?C + F = ABC,dus B  C + F, dus OK Dus: F  G +  G  F +  F  G

28 Minimal set of FD’s  Een verzameling FD’s F heet minimaal als: –de rechterkant van iedere FD uit slechts één attribuut bestaat –er geen enkele FD is met een overbodig attribuut aan de linkerkant –er geen enkele overbodige FD is  een FD X  A heeft een “overbodig” attribuut B (B  X) aan de linkerkant indien je A ook vanuit de overige attributen kan afleiden (dus als A  Z + F met Z = X-B)  een FD X  A is “overbodig” in F wanneer je vanuit X nog steeds A kunt afleiden, zonder gebruik te maken van X  A (dus als A  X + H met H = F - {X  A})

29 Minimal Covers  G is een minimal cover van F  G  F èn G is minimaal  Finding a minimal cover G for F(Algoritme 14.2 boek) 1.set G := F; replace each FD X  A 1 A 2 …A n  G by the n FD’s X  A 1, X  A 2, …, X  A n ; (i.e. update G) 2.for each FD X  A  G for each attribute B  X if ( (G - {X  A})  {(X-B)  A} )  G then replace X  A by (X - B)  A; (i.e. update G) 3.for each remaining FD X  A  G if (G - {X  A})  G then remove X  A from G; (i.e. update G)

30 Opmerking 1: Algoritme 14.2 boek Vraag:wanneer geldt: G-{X  A}  {X-B  A}  G ? 1 e antwoord:  1. G-{X  A}  {X-B  A}  G + èn 2. G  (G-{X  A}  {X-B  A}) + 1. G-{X  A}  {X-B  A}  G +  X-B  A  G +  G |= X-B  A 2. Merk op: {X-B  A} |= X  AB (via augmentatie met B) en dus ook:{X-B  A} |= X  A Dus altijd geldt:(G-{X  A})  {X-B  A} |= X  A Maar:X  A  (G-{X  A}  {X-B  A}) +  G  (G-{X  A}  {X-B  A}) + Kortom: voorwaarde 2 geldt altijd !! Eindantwoord: G-{X  A}  {X-B  A}  G  X-B  A  G +  G |= X-B  A

31 Opmerking 2: Algoritme 14.2 boek Vraag:wanneer geldt: G-{X  A}  G ? 1 e antwoord:  1. G-{X  A}  G + èn 2. G  (G-{X  A}) + 1. G-{X  A}  G + dit is hoe dan ook waar, want: G-{X  A}  G  G-{X  A}  G + 2. G  (G-{X  A}) +  X  A  (G-{X  A}) +  G-{X  A} |= X  A Eindantwoord: G-{X  A}  G  X  A  (G-{X  A}) +  G-{X  A} |= X  A

32 “Slimmere” versie Algoritme 14.2 (impl. I)  Finding a minimal cover G for F(vgl. Algoritme 14.2 boek) 1.set G := F; replace each FD X  A 1 A 2 …A n  G by the n FD’s X  A 1, X  A 2, …, X  A n ; (i.e. update G) remove all trivial FD’s from G; 2.for each FD X  A  G for each attribute B  X if G |= (X-B)  A then replace X  A by (X - B)  A; (i.e. update G) 3.for each remaining FD X  A  G if G - {X  A} |= X  A then remove X  A from G; (i.e. update G) “Voordeel”: afleidbaarheid is vaak snel “met het blote oog” in te zien

33 Voorbeeld Minimal Cover (impl. I)(1/5)  Gegeven een relatie schema R = ABCDE met F = { AB  DE, ABC  BC, A  C, A  D, B  D, D  E, E  C }  Bepaal een minimal cover van F

34 Voorbeeld Minimal Cover (impl. I)(2/5) Stap 1: G := F met alleen enkelvoudige attributen aan de rechterkanten AB  DE(opsplitsen in AB  D en AB  E) ABC  BC(opsplitsen in ABC  B en ABC  C en beide weggooien) A  C A  D B  D D  E E  C

35 Voorbeeld Minimal Cover (impl. I)(3/5) Stap 2: verwijder overbodige attributen uit de linkerkanten 1) AB  DB  D (volgt uit 5) (N.B. ook kon: A  D) dus:G:=G-{AB  D}  {B  D} (dus: gooi 5 weg!) 2) AB  Euit (5) en (6) volgt B  E (transitiviteit) dus:G:=G-{AB  E}  {B  E} 3) A  C 4) A  D 5) B  D 6) D  E 7) E  C

36 Voorbeeld Minimal Cover (impl. I)(4/5) Stap 3: verwijder overbodige afhankelijkheden 1)B  D 2)B  Evolgt uit (1) en (6), dus verwijderen uit G 3)A  Cvolgt uit (4), (6) en (7), dus verwijderen uit G 4) A  D 6)D  E 7)E  C

37 Voorbeeld Minimal Cover (impl. I)(5/5)  Resulterende minimal cover (eindantwoord): B  D A  D D  E E  C

38 “Slimmere” versie Algoritme 14.2 (impl. II)  Finding a minimal cover G for F(vgl. Algoritme 14.2 boek) 1.set G := F; replace each FD X  A 1 A 2 …A n  G by the n FD’s X  A 1, X  A 2, …, X  A n ; (i.e. update G) remove all trivial FD’s from G; 2.for each FD X  A  G for each attribute B  X if A  (X-B) + G then replace X  A by (X - B)  A; (i.e. update G) 3.for each remaining FD X  A  G if A  X + G - {X  A} then remove X  A from G; (i.e. update G) “Voordeel”: d.i. de programma-versie (voor als het ingewikkelder wordt)

39 Voorbeeld Minimal Cover (impl. II)(1/5)  Gegeven een relatie schema R = ABCDE met F = { AB  DE, ABC  BC, A  C, A  D, B  D, D  E, E  C }  Bepaal een minimal cover van F

40 Voorbeeld Minimal Cover (impl. II)(2/5) Stap 1: G := F met alleen enkelvoudige attributen aan de rechterkanten AB  DE(opsplitsen in AB  D en AB  E) ABC  BC(opsplitsen in ABC  B en ABC  C en beide weggooien) A  C A  D B  D D  E E  C

41 Voorbeeld Minimal Cover (impl. II)(3/5) Stap 2: verwijder overbodige attributen uit de linkerkanten 1) AB  D B + G = BDEC  D  B + G  G:=G-{AB  D}  {B  D} 2) AB  E B + G = BDEC  E  B + G  G:=G-{AB  E}  {B  E} 3) A  C 4) A  D 5) B  D 6) D  E 7) E  C

42 Voorbeeld Minimal Cover (impl. II)(4/5) Stap 3: verwijder overbodige afhankelijkheden 1)B  DB + G-{B  D} = BEC  D  B + G-{B  D}  blijft 2)B  EB + G-{B  E} = BDEC  E  B + G-{B  E}  G:=G-{B  E} 3)A  CA + G-{A  C} = ADEC  C  A + G-{A  C}  G:=G-{A  C} 4) A  DA + G-{A  D} = A (!!)  D  A + G-{A  D}  blijft 6)D  ED + G-{D  E} = D  E  D + G-{D  E}  blijft 7)E  CE + G-{E  C} = E  C  E + G-{E  C}  blijft

43 Voorbeeld Minimal Cover (impl. II)(5/5)  Resulterende minimal cover (eindantwoord): B  D A  D D  E E  C

44 Soms meerdere minimal covers F = {A  B,F = {A  C, B  C,B  A, C  A,C  B, A  C,A  B, B  A,B  C C  B }C  A } De resulterende m.c. kan afhangen van de volgorde waarin je de regels behandelt. Bij één en dezelfde F kan dus meer dan één m.c. horen.

45 Nog enkele belangrijke definities (1)  een FD X  Y  F + is triviaal  Y  X  een FD X  Y  F + is volledig   A  X: (X-A)  Y  F + (m.a.w. géén overbodig attribuut in de linkerkant)  relevante FD: een niet-triviale, volledige FD X  A (dus met aan de rechterkant slechts één attribuut)

46 Nog enkele belangrijke definities (2)  sleutel FD:een FD X  A waarbij X een sleutel is  r_sleutel FD:een relevante FD X  A waarbij X een sleutel is (m.a.w.: een relevante sleutelafh.)  r_partiële FD:een relevante FD X  A waarbij X een echte deelverzameling is van een of andere sleutel  r_transitieve FD:een relevante FD X  A waarbij X geen deelverzameling is van enige sleutel (dus X geen sleutel, noch echte deelverz. v.e. sleutel)

47 Precies drie soorten relevante FD’s Zij X  A een relevante FD (d.w.z. een niet-triviale, volledige FD met enkelvoudige rechterkant)  als er een of andere key S is met X = S, dan is X  A een r_sleutel afh.  als er een of andere key S is met X  S èn X  S, dan is X  A een r_partiële afh.  als er geen enkele key S is met X = S of (X  S èn X  S), dan is X  A een r_transitieve afh. Dus:een relevante FD is: ofwel een r_sleutel afh., ofwel een r_partiële afh., ofwel een r_transitieve afh.

48 Redundantie & Normaliseren Problemen voortkomend uit redundantie: –potentiële inconsistentie (oplossing: FD’s afdwingen) –onnodig beslag op disk-ruimte –update anomalieën Schema’s met (potentiële) redundantie: –hoe herken je ze? u normaalvormen –hoe los je het op? u splitsen –wat zijn de valkuilen? u lossless join u dependency preserving

49 Normaalvormen: 1NF R = { Sofi, Naam, Adres, Gdatum, {Vervoermiddelen} } SofiNaamAdresGdatumVervoersmiddelen KokMarkt {fiets,auto,motorfiets} SmitSpui {fiets} KokKerkstr {auto} Attribuut “Vervoersmiddelen” is multi-valued en daarom is R niet in 1NF (en per definitie ook geen relatie) Er geldt:iedere relatie is in 1NF Preciezer geformuleerd: Ieder relationeel schema van een tabel die aan de eisen van het relationele model voldoet (en dus géén multi-valued attributen bevat), is automatisch in 1NF.

50 Normaalvormen: 2NF (1/2) R = { Stad, Straat, Huisnr, Vraagprijs, Stadspop } F = { Stad Straat Huisnr  Vraagprijs, Stad  Stadspop } N.B. uit F volgt: {Stad, Straat, Huisnr} is de enige sleutel Stad 1 Straat 1 Huisnr 1 VraagprijsStadspop AmsterdamWesterstr Den HaagLaan Den HaagHoefkade AppingedamBrink AppingedamBrink de “schuldige” FD: Stad  Stadspop

51 Normaalvormen: 2NF (2/2) R = { Stad, Straat, Huisnr, Vraagprijs, Stadspop } F = { Stad Straat Huisnr  Vraagprijs, Stad  Stadspop } {Stad, Straat, Huisnr} is de enige sleutel De “schuldige” FD was: Stad  Stadspop (zie vorige sheet) r_partiële FD: een relevante FD X  A waarbij X een echte deelverzameling is van een of andere sleutel 2NF: géén r_partiële FD’s naar niet-primaire attributen toegestaan N.B. primaire attribuut = attribuut dat tot een of andere key behoort

52 Normaalvormen: 3NF (1/2) R = { ISBN, Titel, Auteur, Tel_Auteur } F = { ISBN  Titel, ISBN  Auteur, Auteur  Tel_Auteur } {ISBN} is de enige sleutel ISBN 1 Titel AuteurTel_Auteur 1234 Het Stenen Bruidsbed Mulisch De Ontdekking v/d Hemel Mulisch Als je begrijpt wat ik bedoel Toonder Zoals mijn goede vader zei Toonder de “schuldige” FD: Auteur  Tel_Auteur

53 Normaalvormen: 3NF (2/2) R = { ISBN, Titel, Auteur, Tel_Auteur } F = { ISBN  Titel, ISBN  Auteur, Auteur  Tel_Auteur } Key: {ISBN} De “schuldige” FD was: Auteur  Tel_Auteur (zie vorige sheet) r_transitieve FD: een relevante FD X  A waarbij X geen deelverzameling is van een of andere sleutel (dus geen sleutel en ook geen echte deelverz. ) 3NF: géén r_partiële en géén r_transitieve FD’s naar niet-primaire attributen toegestaan

54 Normaalvormen: BCNF (1/3) R = { Stad, Straat, Huisnr, Postcode, Vraagprijs } F = { Stad, Straat, Huisnr  Postcode, Stad, Straat, Huisnr  Vraagprijs Postcode, Huisnr  Vraagprijs Postcode  Stad Postcode  Straat } {Stad, Straat, Huisnr} en {Postcode, Huisnr} zijn de sleutels Stad 1 Straat 1 Huisnr 1,2 Postcode 2 Vraagprijs AmsterdamWesterstr MK Den HaagLaan DT Den HaagHoefkade CA AppingedamBroerstr EK AppingedamBroerstr EK de “schuldige” FD’s: Postcode  Stad en Postcode  Straat

55 Normaalvormen: BCNF (2/3) R = {Stad, Straat, Huisnr, Postcode, Vraagprijs} F = {Stad, Straat, Huisnr  Postcode, Stad, Straat, Huisnr  Vraagprijs Postcode, Huisnr  Vraagprijs Postcode  Stad Postcode  Straat} Keys: { {Stad, Straat, Huisnr}, {Postcode, Huisnr} } De “schuldige” FD’s waren: (zie vorige sheet) u Postcode  Stad u Postcode  Straat BCNF: helemaal géén r_partiële of r_transitieve FD’s toegestaan (dus ook niet naar primaire attributen)

56 Normaalvormen: BCNF (3/3) 4 equivalente beschrijvingen van BCNF:  geen r_partiële of r_transitieve FD’s (ook niet naar primaire attributen)  voor iedere relevante FD X  A  F + geldt: X  A is een r_sleutel FD  voor iedere relevante FD X  A  F + geldt: X is een sleutel  voor iedere niet-triviale FD X  A  F + geldt: X is een supersleutel

57 Relevant set & relevant restriction  Zij F een verzameling FD’s  Als je op F (alleen) de eerste 2 stappen uitvoert van het “slimmere” algoritme 14.2 dan krijg je: F RR  Wij zullen F RR de relevant restriction van F noemen  N.B. ook kan: de 1 e twee stappen van Algoritme 14.2 zoals in het boek, maar dan moet je daarna als derde stap alle triviale FD’s verwijderen  Merk op dat F RR alleen relevante FD’s bevat en dat geldt: F RR  F* = { X  A | X  A  F + èn X  A is relevant }  We zullen F* de relevant set van F noemen

58 Overzicht normaalvormen Zij R een relatie en F een verzameling FD’s (m.b.t. attr. van R)  R is in 2NF m.b.t. F  F + bevat geen r_partiële FD naar een niet-primair attribuut  R is in 3NF m.b.t. F  F + bevat geen r_partiële FD naar een niet-primair attribuut en ook geen r_transitieve FD naar een niet-primair attribuut  R is in BCNF m.b.t. F  F + bevat helemaal geen r_partiële of r_transitieve FD (zelfs niet naar primaire attributen) Vanzelfsprekend kun je beter alleen in F* kijken i.p.v. in heel F +. Sterker nog, slechts in F RR of in een m.c. van F kijken is al OK !! (N.B. dit laatste wordt niet bewezen)

59 Bepaling normaalvorm: procedure + voorbeeld R = ABCD en F = {AD  C, B  D, CD  B}  Bereken eerst F RR of een m.c. (in dit vb. geldt: F = F RR = m.c. van F)  Vindt alle sleutels: AB, AD Dus de primaire attributen zijn: A, B, D  Classificeer de FD’s uit F RR : – AD  C: r_sleutelafh. (naar niet-primair attribuut) – B  D: r_partiële afh. (naar primair attribuut) – CD  B: r_transitieve afh. (naar primair attribuut)  Bepaal de (hoogste, geldende) normaalvorm: 3NF N.B. FD’s die BCNF schenden zijn: B  D en CD  B


Download ppt "Databases I (H.14) Functionele Afhankelijkheden en Normaalvormen Wiebren de Jonge Vrije Universiteit, Amsterdam versie 2003."

Verwante presentaties


Ads door Google