Relationell databasdesign, FB Teori 7-12 Funktionella beroenden - teori Vid utformning av databassystem är det av största vikt att man kan resonera systematiskt om funktionella beroenden bl.a. för att kunna testa scheman för BCNF och 3NF. Formella begreppet nyckel (repetition): K är en (kandidat)nyckel för relation R om (1) K alla attribut i R (2) För ingen äkta delmängd av K är (1) sann. Om K bara satisfierar (1) så är K en supernyckel. Hölje av en mängd av funktionella beroenden Vi kunde definiera ett relationsschema genom att helt enkelt ge en enda kandidatnyckel. De enda funktionella beroenden som sedan anges är att K A för varje attribut A. K är då den enda kandidatnyckeln för dessa funktionella beroenden, enligt den formella definitionen på kandidatnyckel. Eller vi kunde ange några funktionella beroenden och härleda en eller flere nycklar enligt den formella definitionen Tumregel: Funktionella beroenden kommer antingen från nyckelhet eller från fysik. T.ex. "inga två kurser kan hållas i samma rum vid samma tid" ger rum tid kurs Vilka beroenden fås ur E-R-diagrammet?
Relationell databasdesign, FB Teori 7-13 Det räcker ej att beakta en mängd funktionella beroenden, man måste beakta alla funktionella beroenden som gäller. Genom att utgå från en given mängd F av funktionella beroenden kan man bevisa att andra funktionella beroenden gäller är logiskt implicerade av F: Givet ett relationsschema R. Ett funktionellt beroende f på R är logiskt implicerat av en mängd F av funktionella beroenden på R om varje instans r(r) som satisfierar F även satisfierar f. Ex.: Givet relationsschema R(A,B,C,G,H,I) där följande funktionella beroenden gäller A B XY = X Y A C CG H CG I B H Man kan visa att A H är logist implicerat. Dvs. man kan visa att om den givna mängden av funktionella beroenden gäller så gäller äver A H: Antag att t 1 och t 2 är tupler så att t 1 [A] = t 2 [A] A B, def.fb B H, def.fb t 1 [A] = t 2 [A] t 1 [B] = t 2 [B] t 1 [H] = t 2 [H] dvs. A H Hölje av en mängd funktionella beroenden, F + Låt F vara en mängd av funktionella beroenden. Höljet av F (bet. F + ) är mängden av alla funktionella beroenden implicerade av F. F + kan bestämmas m.h.a. en algoritm som utnyttjar Armstrongs axiom, med det är besvärligt ty F + kan vara stort. (Om R innehåller n attribut är antalet möjliga funktionella beroenden i F + 2 2n -2 n+1 +1.)
Relationell databasdesign, FB Teori 7-14 Inferensregler Följande regler kan användas för att härleda funktionella beroenden Armstrongs axiom (1974) 1. Reflexivitet: Om Y X, så X Y 2. Augmentering: Om X Y, så XZ YZ 3. Transitivitet: Om X Y och Y Z, så X Z Av 1-3 följer 4. Union: Om X Y och X Z, så X YZ 5. Uppdelning: Om X YZ så X Y och X Z 6. Pseudo-transitivitet: Om X Y och WY Z, så XW Z Armstrongs axiom är sunda (ger inga felaktiga funktionella beroenden) och fullständiga. Ex.: Visa att A B och BC D implicerar AC D 1. A B (givet) 2. AC BC (augmentering) 3. BC D (givet) 4. AC D (transitivitet anv. 2 och 3) Ex.: Visa att A B och A C implicerar A BC 1. A B (givet) 2. A AB (augmentering m.h.a A) 3. A C (givet) 4. AB CB (augmentering) 5. A BC (transitivitet anv 2 och 4)
Relationell databasdesign, FB Teori 7-15 Höljet av en mängd attribut Ett attribut B är funktionellt bestämt av α om α B. Låt α vara en mängd attribut. Höljet av α under F (bet. α + ) är mängden av alla attribut som funktionellt bestäms av α under en mängd F av funktionella beroenden. Algorim för att beräkna höljet av α, α + Bas: α + = α. Induktion: Om β α +, och β γ är ett givet funktionellt beroende, så lägg γ till α +. Varför? Sluta då α + inte kan ändras. Då bestämmer α funktionellt alla medlemmar av α +, och inga andra attribut. Algorimen kan användas på många sätt: Testa om en attributmängd α är en supernyckel: Beräkna α + i schemat under mängden av dess funktionella beroenden. Om alla attribut i schemat ingår i höljet är mängden en supernyckel. Ex.: R = (A,B,C,D) A B, BC D A + = AB B + = B (AC) + = ABCD dvs. AC är en nyckel Testa om ett funktionellt beroende α β gäller, dvs tillhör F + : Beräkna α +, om β α + gäller α β eljest gäller det ej. Ex.: A C gäller ej ty C / A + = AB Beräkna F + : Beräkna γ + för varje γ R. Varje S γ + ger det funktionella beroendet γ S till F +.
Relationell databasdesign, FB Teori 7-16 Ex.: R = (A,B,C,G,H,I) F = {A B, A C, CG H, CG I, B H} Några element i F + i exemplet ovan: A H CG HI AG I Finns det flere? ty A B och B H (anv. trans) ty CG H, CG I (anv. union) ty A C i F, AG CG (aug med G), CG I i F (trans) ger res. Bestämning av alla härledda funktionella beroenden Motivering: Antag att vi har en relation ABCD med några funktionella beroenden F. Om vi besluter att uppdela ABCD i ABC och AD, vad är de funktionella beroendena för ABC och AD? Ex.: R = (A,B,C,D), F = {AB C, C D, D A} Det ser ut som om bara AB C gäller i ABC, men i själva verket följer C A från F och är tillämpbar på relation ABC. Problemet är exponentiellt i värsta fall. Algoritm För varje mängd av attribut X i R beräkna X +. Eliminera några "uppenbara" beroenden som följer av andra: 1. Eliminera triviala funktionella beroenden (högersida vänstersida) 2. Eliminera XY Z om X Z gäller. 3. Eliminera funktionella beroenden vars högra sidor inte är enskilda attribut. Obs! Efter det att de upptäckta FB na projicerats på en relation kan de som eliminerats med reglerna ovan rekonstrueras i den projicerade relationen.
Relationell databasdesign, FB Teori 7-17 Ex.: R = (A,B,C,D) F = {AB C, C D, D A} Vilka funktionella beroenden följer. Dvs. AB, BC och BD är supernycklar A + = A B + = B C + = ACD D + = AD (AB) + = ABCD (BC) + = ABCD (BD) + = ABCD (AC) + = ACD (AD) + = AD (CD) + = ACD ingenting ingenting lägg C A till höljet lägg AB D (lämna bort alla supermängder av AB) (lämna bort alla supermängder av BC) lägg till BD C (lämna bort alla supermängder av BD) Alla andra mängder innehåller AB, BC eller BD så de ger inget nytt. Dvs. de enda intressanta funktionella beroenden som följer av F är: C A AB D BD C
Relationell databasdesign, FB Teori 7-18 Kanonisk övertäckning Alltid då en uppdatering görs i en databas måste systemet kontrollera att inga funktionella beroenden brytes mot. Dvs. att alla funktionella beroenden i F är satisfierade i databasens nya tillstånd. (Om de ej är satisfierade skall systemet återställas.) Kontrollen kan göras för en förenklad mängd av funktionella beroenden som har samma hölje som F, som är enklare att utföra. Att F och den förenklade mängden har samma hölje innebär att om databasen satisfierar den förenklade mängden av funktionella beroenden så satisfierar den även F, och tvärtom. Def.: Betrakta en mängd F av funktionella beroenden och det funktionella beroendet α β i F. Attribut A är överflödigt i α om A α och F logiskt implicerar (F { α β } ) { (α A) β } Attribut A är överflödigt i β om A β och mängden av funktionella beroenden Varför F F (F { α β } ) { α (β A) } och ej F F? logiskt implicerar F. En kanonisk övertäckning F c för F är en mängd av beroenden så att F logiskt implicerar alla beroenden i F c och F c logiskt implicerar alla beroenden i F, och vidare Inget FB i F c innehåller ett överflödigt attribut Varje vänstersida av ett FB i F c är unikt Hur hitta en förenklad mängd F av F? Varför F F och ej F F? Kan en mängd av funktionella beroenden ha flere kanonisk övertäckningar?
Relationell databasdesign, FB Teori 7-19 Beräkning av en kanonisk övertäckning för F: F c = F repeat Använd union-regeln för att ersätta beroenden α 1 β 1 och α 1 β 2 med α 1 β 1 β 2 Bestäm ett FB α βmed ett överflödigt attribut i antingen α eller i β Om ett överflödigt attribut hittas, stryk det från α β until F c inte ändras Ex.: R = (A, B, C) F = { A BC B C A B AB C } Det finns två FB n med samma vänstersida, kombinera dem: A BC och A B kombineras till A BC Är A överflödigt i AB C? dvs. gäller F (F { AB C} ) { B C } Ja ty B C F implicerar logiskt AB C Är C är överflödigt i A BC? dvs. gäller (F { A BC } ) { A B} F Ja ty A BC kan härledas ur F ty A + = ABC under F F = { A BC B C AB C } F = { A BC B C } F = { A B B C } Den kanoniska övertäckningen F c för F är F c = { A B, B C }