Relatsiooniline andmebaaside teooria II. 5. Loeng Anne Villems ATI
Loengu plaan Sõltuvuste pere Relatsiooni dekompositsioon Kadudeta ühendi omadus Sõltuvuste pere säilitamine Kui jõuame, siis ka normaalkujud
Sõltuvuste pere Meile ei meeldi algoritmid, mis vaatavad läbi F +. Leidsime juba ühe algoritmi, mis vaatab läbi F. Kas saab F väiksemaks muuta?
Sõltuvuste pere F kate G Sõltuvuste ekvivalents: Olgu relatsioonil R sõltuvused pered F ja G Me ütleme, et nad on ekvivalentsed, kui F + = G + e. ütleme, et G katab F (ja vastupidi). Kontrollimiseks on vaja iga X Y F puhul kontrollida, kas ta kuulub G + Seda kontrollime, leides X + G järgi ja vaadates, kas Y X + Sama iga sõltuvuse korral G, kas Y X + F järgi.
Relatsioonide dekompositsioon Tähistame relatsiooni R atribuutide ( tunnuste) hulka {A 1, A 2,, A n } tähega U. Def. Relatsiooni R(U) dekompositsiooniks nimetatakse relatsiooni R asendamist relatsioonide hulgaga ={R 1, R 2,, R k } selliselt, et Hulgad U i võivad olla lõikuvad.
Milleks dekompositsioonid? See annab andmebaasi administraatorile võimaluse läbi viia salaplaan: R(U) asemel hoida andmebaasis relatsioonide hulka R 1 (U 1 ), R 2 (U 2 ),, R k (U k ). Saame nende R i -de seisundid R seisundist projektsiooniga. Salaplaan õnnestub, kui suudame R(U) seisundi taastada R 1 (U 1 ), R 2 (U 2 ),, R k (U k ) seisunditest loomuliku ühendi operatsiooniga. Kas see alati on nii? Vaatame näidet!
Näide Olgu R(A, B, C) seisund järgmine: Olgu dekompositsioon ={R 1, R 2 ) selline, et R 1 =(A, B) ja R 2 =(B, C), siis on R 1 seisund ja R 2 seisund vastavalt: A B A C Ja nende loomulik ühend 1 2 1 2 (üle A) 1 3 Tulemuses on 4 rida! Info läks kaotsi! A B C 1 2 2 1 2 1 1 3 1 1 1 A B C 1 2 2 1 2 1 1 3 2 1 3 1
Kadudeta ühendi omadus Def. Olgu antud R, F ja ={R 1, R 2,, R k }. Olgu r relatsiooni R mistahes seisund ja r 1, r 2, r k vastavalt R 1, R 2,, R k seisundid, siis me ütleme, et dekompositsioon on kadudeta ühendi omadusega F suhtes, kui r = (r 1 ) (r 2 )... (r k ) märk. s.t. relatsiooni seisund on taastatav oma vastavatest projektsioonidest. on siin loomuliku ühendi Eelmise näite dekompositsioon ei olnud seda!
Kadudeta ühendi kontrolli algoritm Antud R(A 1, A 2,, A n ), F ja ={R 1, R 2,,R k }. Meetod: Ehitame tabeli n veeru ja k reaga, täidame tähistustega a i ja b i,j järgmiselt: elemendiks on a i, kui R i -s esineb tunnus A j, b i,j vastasel juhul. Kordame: vaatame läbi tabeli read ja F. Kui leiame X Y sellise, et kaks tabeli rida langevad kokku X osas, muudame Y nii, et nad langevad ka kokku (s.t. asendame b i,j a i -ga või kui mõlemad on erinevad b-d, muudame indeksid kokkulangevaks, valides väiksema rea tähise) Tulemus: rida a-dest: Jah, kadudeta; pole rida a-dest - Ei
Näide: Hange( Firma nimi, Aadress, Toode, Hind) F: {Firma nimi Aadress; Firma nimi, Toode Hind } Kas Hankija(Firma nimi, Aadress) ja Tarne ( Firma nimi, Toode, Hind) on kadudeta ühendi omadusega? Firma nimi Aadress Toode Hind a 1 a 2 b 1,3 b 1,4 a 1 b 2,2 a 2 a 3 a 4 See dekompositsioon on kadudeta ühendi omadusega.
Erijuht: k=2, s.t. R(U),F ja =(R 1 (U1), R 2 (U2)) Teoreem: k=2 korral annab =(R 1, R 2 ) kadudeta ühendi parajasti siis kui kehtib üks kahest funktsionaalsest sõltuvusest: U 1 U 2 U 1 -U 2 või U 1 U 2 U 2 -U 1 NB! Nõuab, et üks kuulub F + Tõestus: U 1 U 2 U 1 -U 2 U 2 - U 1 R1 a a a a b b R2 a a b b a a
Sõltuvuste pere säilitamine Def. Pere F projektsioon atribuutide hulgale Z, mida tähistame Z (F), on kõigi nende sõltuvuste hulk X Y F +, et XY Z. Def. Me ütleme, et dekompositsioon säilitab pere F, kui hulgast Ui (F) saab tuletada kõik F elemendid.
Kuidas leida dekompositsiooni liikmete sõltuvuste pered? Loodusest F väljakorjamine on aeganõudev ja keeruline tegevus Kui R jaoks on see tehtud ja asendame R tema dekompositsiooni liikmetega, siis kust saame R 1,..., R k jaoks nende funktsionaalsete sõltuvuste pered? Hea, kui saaks R jaoks kirja pandud perest F, ilma uute loodusvaatlusteta.
Miks on vaja säilitada pere F? Näide. R (Linn, Tänav, Postiindeks) F={P L, LT P } L T P Dekompositsioon (R 1 (L,P), R 2 (T,P)) annab kadudeta ühendi, kuna (LP TP) (LP-TP), kuid ei säilita F. Kaotsi läheb LT P. Miks on see halb? Näide: olgu meil andmebaasi R 1 (T, P), R 2 (L, P) seisund R 1 Tänav P.ind Kuke 2999 Kuke 2998 R 2 Linn P.ind Tallinn 2999 Tallinn 2998 R Linn Tänav P.ind Tallinn Kuke 2999 Tallinn Kuke 2998 Nende loomulik ühend üle Postiindeksi on: See relatsioon aga ei rahulda funktsionaalset sõltuvust LT P.
Dekompositsiooni omaduste kokkuvõte Funktsionaalsete sõltuvuste teooria annab meile formaalse aparatuuri otsustamaks, kas antud relatsioon on heade omadustega. Kui ei, saame dekompositsiooniga tagada, et meil oleks andmebaasis ainult head relatsioonid. Tahame teha ainult häid dekompositsioone: neid, mis annavad kadudeta ühendi ja säilitavad F
Teine normaalkuju Second normal form Teatavasti võib relatsioonil olla palju võtmeid. Kui tunnus kuulub mingi võimaliku võtme tunnuste hulka, nimetame tunnust esmaseks (primary), vastasel juhul sekundaarseks (secondary). Def: Teine normaalkuju: Me ütleme, et relatsioon R on teises normaalkujus (2NF), kui mistahes võtme X ning mistahes sekundaarse tunnuse A jaoks ei leidu sellist võtme atribuutide pärisalamhulka Y X, et kehtiks Y A.
Näide Varustamine (Hankija nimi, Hankija aadress, Hankija telefon, Toode, Toote hind) Ainus võti: {Hankija nimi, Toode} F: Hankija nimi, Toode Hind Hankija nimi Hankija aadress, Hankija telefon Teine neist kahest rikub 2NF tingimusi. See relatsioon ei ole teisel normaalkujul.
Relatsiooni viimine teisele normaalkujule Teisele normaalkujule viiakse relatsioon dekompositsiooni teel. Kuidas seda teha? Millised tunnused jätta alles lähterelatsiooni, millised viia teise relatsiooni? Kui meil relatsioonil R atribuutide hulgaga U rikub teise normaalkuju tingimust funktsionaalne sõltuvus Y Z, siis tuleb teha järgmine dekompositsioon: ={R 1, R 2 } selliselt, et R 1 ( U - Z) ja R 2 ( YZ). Väide: Iga relatsiooni, mis rikub 2NF, saab viia 2NF kujule.
Näide Varustamine (Hankija nimi, Hankija aadress, Hankija telefon, Toode, Toote hind) Võti: {Hankija nimi, Toode} F: Hankija nimi, Toode Hind Hankija nimi Hankija aadress, Hankija telefon Y Z Dekompositsioon: Hankija (Hankija nimi, Hankija aadress, Hankija telefon) Varustamine (Hankija nimi, Toode, Toote hind)
Kolmas normaalkuju Third Normal Form Def. Kolmas normaalkuju. Relatsioon R on kolmandas normaalkujus (3 NF), kui ei leidu sellist kolmikut X, Y, A, kus X on mingi relatsiooni R võti, A on sekundaarne atribuut ja kus kehtiksid väited: 1. X Y 2. Y A 3. Y X X Y A
3NF rikkumise näide Tudeng (Perenimi, Eesnimi, Matriklinumber, P E M osakond, teaduskond) O T F={M P, E, O, T ; O T} Kolmik: M, O, T rikub 3NF. M O T
Kui relatsioon ei ole 2NF, siis ei ole ta 3NF Näide Hange (Nimi, Aadress, Kaup, Hind) N A K H F={ NK H, N A} Polnud 2NF, pole ka 3NF, kuna NK N A, kus juures N ei määra NK. On muidugi 1NF.
Mõtlemiseks Kas relatsioon: Indeks ( Tänav, Linn, Postiindeks) on 3NF? Lihtsustav eeldus: tervel tänaval sama indeks. F={ Tänav, Linn Postiindeks; Postiindeks Linn} Vihje 1: millised on selle relatsiooni võimalikud võtmed? (on 2 võimalikku võtit). Vihje 2: millised on selle relatsiooni sekundaarsed tunnused?
Vastus Kuna kõik tunnused on primaarsed (sekundaarseid ei olegi), siis see relatsioon on 3 normaalkujul. Sellepärast, et ei saa olla rikkuvat kolmikut, kus viimane liige on sekundaarne.
Näide, mis on 2NF, aga pole 3NF KM (Kaubamaja, Kaup, Osakond, Juhataja) F={MK O, MO J} M K O J ainuke võti on MK. Kolmik: {M, K}; {M,O}; J - rikub 3NF nõudeid. Aga ükski võtme M,K alamhulk, ei määra mingit sekundaarset tunnust, seega on 2NF
Relatsiooni viimine kolmandale normaalkujule Antud: R atribuutide hulgaga U ja temal kehtivate funktsionaalsete sõltuvuste perega F Kui leidub selline X Y A, mis rikub 3NF, jagame R kaheks: R 1 (U-A) ja R 2 (YA). Leiame R1 (F) ja R2 (F). S.t. millised sõltuvused on R1-s ja R2-s Kordame R 1 ja R 2 jaoks 3NF kontrolli, kuni selliseid kolmikuid, mis rikuksid 3NF enam ei leidu.
Teine 3NF saavutamise algoritm Eeldame, et F on sõltuvuste minimaalne kate. Kui mõni F element sisaldab kõiki R atribuute, on tulemuseks R. Vastasel juhul teeme dekompositsiooni, kus iga sõltuvus X A F annab ühe elemendi atribuutidega XA. Ühendame samade vasakute pooltega F elementide tekitatud relatsioonid üheks XA 1 A 2...A k Teoreem: Algoritm 2 annab 3NF. Tõestus: läbinähtav.
Näide teise 3NF algoritmi kohta Tuletage meelde loengus tehtud harjutust dekompositsiooni kadudeta ühendi omaduse kohta: Eksam(Teadusk.,Osak.,Matr,_nr,Eesn,pereN,Dtiitel, Õppej, Aine,Kood,AinePunkte,kuuP,Hinne) F: O T; M E,N,O; Õ D; K A,AP,Õ; M,K,P H Dekompositsioon: R 1 (O,T); R 2 (M,E,N,O); R 3 (Õ,D); R 4 (K,A,AP,Õ) R 5 (M,K,P,H) on 3. normaalkujul, annab kadudeta ühendi ja säilitab F.
3NF omadused 1. Iga relatsiooni saab viia 3NF kujule. 2. Seejuures nii, et kehtiks kadudeta ühendi om. 3. Seejuures saab säilitada kõik funktsionaalsed sõltuvused. Kolmas normaalkuju on hea normaalkuju!
Kuhu kadus esimene normaalkuju? Meie relatsioonid, mida seni vaatasime, olid kõik 1. normaalkujul. Def. 1NF: Def. Relatsioon R D 1 x D 2 x... x D n on esimeses normaalkujus, kui kõik vaatluse all olevad hulgad D i koosnevad lihtelementidest e. atomaarsetest väärtustest S.t. relatsiooni R seisundi mistahes rida e. korteeži t=<t 1, t 2,, t n > elemendid on lihtväärtused vaadeldavas süsteemis.
Esimese normaalkuju selgitus Esimene normaalkuju nõuab, et tabeli ühes lahtris ei oleks mitut väärtust. Näiteks TÜ teadlaste andmebaasis võib olla üheks teadlase tunnuseks olla tema kraad, aga reeglina on teadlane kaitsnud mitut kraadi bakalaureuse, magistri- või doktorikraad. Samuti võib tal olla mitu ühe taseme kraadi näiteks mitu magistrikraadi. Selliseid andmeid ei saa panna ühte tunnusesse, vaja on teha lisatabel.
Mida me oskame? 1. Määrata rel.-l kehtivad fun.-sed sõltuvused 2. Dekopositsiooniga viia rel.-n 3NF 3. Kontrollida, kas annab kadudeta ühendi 4. Kontrollida, kas F säilis.