versie 2003 Databases I H 14 Functionele Afhankelijkheden
versie 2003 Databases I (H. 14) Functionele Afhankelijkheden en Normaalvormen Wiebren de Jonge Vrije Universiteit, Amsterdam
De rest van de colleges DB I u (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 u (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, . . .
Introductie Normaliseren (1/5)
Introductie Normaliseren (2/5)
Introductie Normaliseren (3/5)
Introductie Normaliseren (4/5)
Introductie Normaliseren (5/5)
Data dependencies (gegevensafhankelijkheden) u 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. ) u redundantie ‘update anomalies’ – o. a. vanwege potentiële inconsistentie – update: modification, insertion, deletion
FD’s (functionele afhankelijkheden) u gegeven: – een database-schema D met attributen A 1, A 2, …, An – X {A 1, A 2, …, An} en Y {A 1, A 2, …, An} u 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 u 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’)
Voorbeeld FD’s (1/4) Gegeven de volgende extensie van relatie R: R A a a b c B e f g g C i i k k Gelden in R de volgende functionele afhankelijkheden: u A B ? Antwoord: Nee u B C ? Antwoord: Misschien !!
Voorbeeld FD’s (2/4) Gegeven de volgende extensie van een relatie: EMP ENR E 1 E 2 E 3 E 4 E 5 NAME John Joe Jack Will Bridget BDATE 1964 -08 -28 1968 -04 -04 1969 -09 -03 1971 -03 -21 1972 -01 -22 DNR D 1 D 1 D 2 Beantwoord op basis van de gegeven extensie of in EMP de volgende functionele afhankelijkheden gelden: u ENR NAME ? Antwoord: Misschien u DNR NAME ? Antwoord: Nee u BDATE NAME ? Antwoord: Misschien
Functionele afhankelijkheden u Een functionele afhankelijkheid is een constraint u Of voldaan wordt aan een constraint is (mede) afhankelijk van de betekenis van de gegevens u Het is niet genoeg als een constraint in één extensie opgaat, vereist is dat hij in elke extensie opgaat! u Een functionele afhankelijkheid is daarmee een eigenschap van de intensie (van de DB of relatie)
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? u ENR NAME Antwoord: Ja u DNR NAME Antwoord: Vrijwel zeker niet u BDATE NAME Antwoord: Vrijwel zeker niet N. B. : bij deze beantwoording kennis gebruikt over bedrijven i. h. a.
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 ENR E 1 E 2 E 3 E 4 E 5 NAME John Joe Jack Will Bridget BDATE 1964 -08 -28 1968 -04 -04 1969 -09 -03 1971 -03 -21 1972 -01 -22 DNR D 1 D 1 D 2 Gelden de volgende functionele afhankelijkheden? u ENR NAME Antwoord: Ja u DNR NAME Antwoord: Nee u BDATE NAME Antwoord: Nee / Misschien (met / zonder gebruik extra kennis)
Notatie Zij F een verzameling FD’s, dan notatie: u 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” u F+ def { X Y | F |= X Y}
Keys / sleutels Als gegeven: – een relatieschema R met attributen A 1, A 2, …, An – een verzameling functionele afhankelijkheden F – een verzameling X {A 1, A 2, …, An} dan geldt: X is een sleutel van R d. e. s. d. als: 1) X A 1 A 2…. . . An F+ èn 2) Y: Y X (Y A 1 A 2…. . . An F+) (identificatie) (minimaliteit) Notaties: a) hier nu gebruikt: ABC def { A, B, C } = { B, A, C } b) straks ook nog: XY def X Y
‘Sleutelbegrippen’ : -) Begrippen: u key u superkey (wel identificatie, geen minimaliteit vereist) u candidate key (elke echte sleutel) u primary key (één uitverkozen sleutel) u 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.
Armstrong’s Afleidingsregels (=AA) Gegeven: de verzameling U van alle attributen in DB-schema D u als Y X U, dan X Y (reflexiviteit) u als X Y èn Z U, dan XZ YZ (augmentatie) u 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)
Andere veel gebruikte afleidingsregels u als X Y èn Z Y, dan X Z (decompositie) u als X Y èn X Z, dan X YZ (vereniging) u 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)
Logisch afl. baar vs. AA-afl. baar u (“|– 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} u m. b. v. decompositie-regel, verenigingsregel en de definitie van X+F is afleidbaar: hulpstelling: F |– X Y Y X+F (*) u m. b. v. (*): Armstrong’s Afl. regels zijn volledig, d. w. z. “|– |=” u al gezien: Armstrong’s Afl. regels zijn gezond, d. w. z. “|– |=”
Gezond en volledig, i. e. “|– |=” Omdat Armstrong’s afleidingsregels gezond en volledig zijn, m. a. w. omdat “|– |=”, geldt nu dus ook: u X+F def { A | F |– X A } = { A | F |= X A } u F+ def { X Y | F |= X Y} = { X Y | F |– X Y} u F |= X Y Y X+F (**) (vgl. met hulpstelling)
Vier keer hetzelfde u X Y F+ (m. b. v. definitie van F+) u F |= X Y (m. b. v. “|- |=”) u F |– X Y (volgens hulpstelling afgeleid uit def. X+F) u Y X +F N. B. : F+ def { X Y | F |= X Y} X+F def { A | F |– X A}
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 C, BC BC, AC A, AC C, AC AC, ABC A, ABC B, ABC C, ABC AB, ABC BC, ABC ABC} Hier zit dus heel erg veel werk aan vast. . . (al gauw ondoenlijk)
F G u u (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, ABC A A B, B B, C B, AB B, BC B, ABC B A C, B C, C C, AB C, BC C, ABC C A AB, B AB, C AB, AB AB, BC AB, ABC AB A BC, B BC, C BC, AB BC, BC BC, ABC BC A AC, B AC, C AC, AB AC, BC AC, ABC AC
F G (2/2) Het kan ook slimmer / eenvoudiger: u merk op: F+ = G+ F+ u 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) u 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+. u idem dito*: F G+ testen zonder G+ uit te rekenen.
Voorbeeld B+ u gegeven: F = {A B, B C, C A} u wat is nu B+F? B+F = {B, C, A} = BCA = ABC Algoritme 14. 1 boek: X+ : = X; repeat old. X+ : = X+; for each FD Y Z F do if Y X+ then X+ : = X+ Z; until (X+ = old. X+) (na afloop bevat X+ precies X+F )
Terug naar ons voorbeeld: F G ? u 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, - B C G+ ? B+G = ABC, - C A G+ ? C+G = ABC, geldt G F+ ? - A C F+ ? A+F = ABC, - B A F+ ? B+F = ABC, - C B F+ ? C+F = ABC, Dus: F G+ G F+ F G dus B A+G, dus OK dus C B+G, dus OK dus A C+G, dus OK dus C A+F, dus OK dus A B+F, dus OK dus B C+F, dus OK
Minimal set of FD’s u 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 u 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) u 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})
Minimal Covers u G is een minimal cover van F G F èn G is minimaal u Finding a minimal cover G for F (Algoritme 14. 2 boek) 1. set G : = F; replace each FD X A 1 A 2…An G by the n FD’s X A 1, X A 2, …, X An; (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)
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: en dus ook: Dus altijd geldt: Maar: {X-B A} |= X AB (via augmentatie met B) {X-B A} |= X A (G-{X A}) {X-B A} |= X A X A (G-{X A} {X-B A})+ G (G-{X A} {X-B A})+ Kortom: voorwaarde 2 geldt altijd !! Eindantwoord:
Opmerking 2: Algoritme 14. 2 boek Vraag: 1 e antwoord: wanneer geldt: G-{X A} G ? 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+ 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
“Slimmere” versie Algoritme 14. 2 (impl. I) u Finding a minimal cover G for F (vgl. Algoritme 14. 2 boek) 1. set G : = F; replace each FD X A 1 A 2…An G by the n FD’s X A 1, X A 2, …, X An; (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
Voorbeeld Minimal Cover (impl. I) u Gegeven een relatie schema R = ABCDE met F={ ABC A A B D E u AB DE, BC, D, E, C } Bepaal een minimal cover van F (1/5)
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
Voorbeeld Minimal Cover (impl. I) (3/5) Stap 2: verwijder overbodige attributen uit de linkerkanten 1) weg!) 2) 3) 4) 5) 6) 7) AB D B D (volgt uit 5) (N. B. ook kon: A D) dus: G: =G-{AB D} {B D} (dus: gooi 5 AB E uit (5) en (6) volgt B E dus: G: =G-{AB E} {B E} A A B D E C D D E C (transitiviteit)
Voorbeeld Minimal Cover (impl. I) (4/5) Stap 3: verwijder overbodige afhankelijkheden 1) B D 2) B E volgt uit (1) en (6), dus verwijderen uit G 3) A Cvolgt uit (4), (6) en (7), dus verwijderen uit G 4) A D 6) 7) D E E C
Voorbeeld Minimal Cover (impl. I) u Resulterende minimal cover (eindantwoord): B D A D D E E C (5/5)
“Slimmere” versie Algoritme 14. 2 (impl. II) u Finding a minimal cover G for F (vgl. Algoritme 14. 2 boek) 1. set G : = F; replace each FD X A 1 A 2…An G by the n FD’s X A 1, X A 2, …, X An; (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)
Voorbeeld Minimal Cover (impl. II) u Gegeven een relatie schema R = ABCDE met F={ ABC A A B D E u AB DE, BC, D, E, C } Bepaal een minimal cover van F (1/5)
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
Voorbeeld Minimal Cover (impl. II) (3/5) Stap 2: verwijder overbodige attributen uit de linkerkanten 1) AB D 2) AB E 3) A C 4) A D 5) B D 6) D E 7) E C B+G = BDEC D B+G G: =G-{AB D} {B D} B+G = BDEC E B+G G: =G-{AB E} {B E}
Voorbeeld Minimal Cover (impl. II) (4/5) Stap 3: verwijder overbodige afhankelijkheden 1) B DB+G-{B D} = BEC 2) B E B+G-{B E} = BDEC 3) A CA+G-{A C} = ADEC 4) A D A+G-{A D} = A (!!) 6) 7) D B+G-{B D} E B+G-{B E} C A+G-{A C} D A+G-{A D} D ED+G-{D E} = D E D+G-{D E} blijft E CE+G-{E C} = E C E+G-{E C} blijft G: =G-{B E} G: =G-{A C} blijft
Voorbeeld Minimal Cover (impl. II) u Resulterende minimal cover (eindantwoord): B D A D D E E C (5/5)
Soms meerdere minimal covers F = { A B, B C, C A, A C, B A, C B } F = { A C, B A, C B, A B, B C 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.
Nog enkele belangrijke definities (1) u een FD X Y F+ is triviaal Y X u een FD X Y F+ is volledig A X: (X-A) Y F+ (m. a. w. géén overbodig attribuut in de linkerkant) u relevante FD: een niet-triviale, volledige FD X A (dus met aan de rechterkant slechts één attribuut)
Nog enkele belangrijke definities (2) u sleutel FD: een FD X A waarbij X een sleutel is u r_sleutel FD: een relevante FD X A waarbij X een sleutel is (m. a. w. : een relevante sleutelafh. ) een relevante FD X A waarbij X een echte deelverzameling is van een of andere sleutel u r_partiële FD: u 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)
Precies drie soorten relevante FD’s Zij X A een relevante FD (d. w. z. een niet-triviale, volledige FD met enkelvoudige rechterkant) u als er een of andere key S is met X = S, dan is X A een r_sleutel afh. u als er een of andere key S is met X S èn X S, dan is X A een r_partiële afh. u 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.
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
Normaalvormen: 1 NF R = { Sofi, Naam, Adres, Gdatum, {Vervoermiddelen} } Sofi Naam Adres Gdatum 351. 72. 069 Kok Markt 23 {fiets, auto, motorfiets} 816. 45. 926 Smit Spui 13 465. 99. 810 Kok Kerkstr 7 Vervoersmiddelen 1 -2 -1934 5 -6 -1978 2 -3 -1943 {fiets} {auto} Attribuut “Vervoersmiddelen” is multi-valued en daarom is R niet in 1 NF (en per definitie ook geen relatie) Er geldt: iedere relatie is in 1 NF Preciezer geformuleerd: Ieder relationeel schema van een tabel die aan de eisen van het relationele model voldoet (en dus géén multi-valued attributen
Normaalvormen: 2 NF (1/2) R = { Stad, Straat, Huisnr, Vraagprijs, Stadspop } F = { Stad Straat Huisnr Vraagprijs, Stadspop } N. B. uit F volgt: {Stad, Straat, Huisnr} is de enige sleutel Stad 1 Straat 1 Huisnr 1 Vraagprijs Stadspop Amsterdam Westerstr 31 500 000 734 000 Den Haag Laan 237 400 000 442 000 Den Haag Hoefkade 30 150 000 442 000 Appingedam Brink 8 200 000 12 000 Appingedam Brink 12 225 000 12 000 de “schuldige” FD: Stadspop
Normaalvormen: 2 NF (2/2) R = { Stad, Straat, Huisnr, Vraagprijs, Stadspop } F = { Stad Straat Huisnr Vraagprijs, Stadspop } {Stad, Straat, Huisnr} is de enige sleutel De “schuldige” FD was: Stadspop (zie vorige sheet) r_partiële FD: een relevante FD X A waarbij X een echte deelverzameling is van een of andere sleutel 2 NF: géén r_partiële FD’s naar niet-primaire attributen toegestaan N. B. primaire attribuut = attribuut dat tot een of andere key behoort
Normaalvormen: 3 NF (1/2) R = { ISBN, Titel, Auteur, Tel_Auteur } F = { ISBN Titel, ISBN Auteur, Auteur Tel_Auteur } {ISBN} is de enige sleutel ISBN 1 Titel Auteur Tel_Auteur 1234 Het Stenen Bruidsbed Mulisch 06 23456789 2345 De Ontdekking v/d Hemel Mulisch 06 23456789 3456 Als je begrijpt wat ik bedoel Toonder +353 1 2345678 4567 Zoals mijn goede vader zei Toonder +353 1 2345678 de “schuldige” FD: Auteur Tel_Auteur
Normaalvormen: 3 NF (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. ) 3 NF: géén r_partiële en géén r_transitieve FD’s naar niet-primaire attributen toegestaan
Normaalvormen: BCNF (1/3) R = { Stad, Straat, Huisnr, Postcode, Vraagprijs } F = { Stad, Straat, Huisnr Postcode, Stad, Straat, Huisnr Vraagprijs Postcode Stad Postcode Straat } {Stad, Straat, Huisnr} en {Postcode, Huisnr} zijn de sleutels Stad 1 Straat 1 Amsterdam Den Haag Appingedam Huisnr 1, 2 Westerstr Laan 237 Hoefkade Broerstr 8 Broerstr 12 Postcode 2 Vraagprijs 31 1015 MK 500 000 2512 DT 400 000 30 2526 CA 150 000 9901 EK 200 000 9901 EK 225 000 de “schuldige” FD’s: Postcode Stad en Postcode Straat
Normaalvormen: BCNF (2/3) R = {Stad, Straat, Huisnr, Postcode, Vraagprijs} F = {Stad, Straat, Huisnr Postcode, Stad, Straat, Huisnr Vraagprijs Postcode Stad Postcode Straat} Keys: { {Stad, Straat, Huisnr}, {Postcode, Huisnr} } De “schuldige” FD’s waren: u Postcode Stad u Postcode Straat (zie vorige sheet) BCNF: helemaal géén r_partiële of r_transitieve FD’s toegestaan (dus ook niet naar primaire attributen)
Normaalvormen: BCNF (3/3) 4 equivalente beschrijvingen van BCNF: u geen r_partiële of r_transitieve FD’s (ook niet naar primaire attributen) u voor iedere relevante FD X A F+ geldt: X A is een r_sleutel FD u voor iedere relevante FD X A F+ geldt: X is een sleutel u voor iedere niet-triviale FD X A F+ geldt: X is een supersleutel
Relevant set & relevant restriction u Zij F een verzameling FD’s u Als je op F (alleen) de eerste 2 stappen uitvoert van het “slimmere” algoritme 14. 2 dan krijg je: FRR u Wij zullen FRR de relevant restriction van F noemen u 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 u Merk op dat FRR alleen relevante FD’s bevat en dat geldt: FRR F* = { X A | X A F+ èn X A is relevant } u We zullen F* de relevant set van F noemen
Overzicht normaalvormen Zij R een relatie en F een verzameling FD’s (m. b. t. attr. van R) u R is in 2 NF m. b. t. F F+ bevat geen r_partiële FD naar een niet-primair attribuut u R is in 3 NF 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 u 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 FRR of in een m. c. van F kijken is al OK !! (N. B. dit laatste wordt niet bewezen)
Bepaling normaalvorm: procedure + voorbeeld R = ABCD en F = {AD C, B D, CD B} u Bereken eerst FRR of een m. c. (in dit vb. geldt: F = FRR = m. c. van F) u Vindt alle sleutels: AB, AD Dus de primaire attributen zijn: A, B, D u Classificeer de FD’s uit FRR: – 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: 3 NF u N. B. FD’s die BCNF schenden zijn: B D en CD B
- Slides: 59