Andmebaasid, MTAT.03.264 6. loeng Normaalkujud E-R teisendus relatsiooniliseks Anne Villems
Meil on: Relatsiooni mõiste Relatsioonalgebra Kus me oleme? Funktsionaalsete sõltuvuse pere F ja tema sulund F + Võti Oskame kontrollida, kas X Y kasutades X + s.t. ilma F +
jätkub: Kus me oleme? (2) sõltuvuste pere katte mõiste Dekompositsiooni mõiste Dekompositsiooni omadus: Kadudeta ühend
Normaalkujud
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, valdkond) O V F={M P, E, O, T ; O V} Kolmik: M, O, V rikub 3NF. M O V
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- ja/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.
Boyce-Codd i normaalkuju On 3NF edasiarendus. Def. Relatsioon R sõltuvuste perega F on Boyce- Codd i normaalkujul, kui mistahes sellel relatsioonil kehtiva funktsionaalse sõltuvuse X A korral, kus A ei kuulu X, hulk X sisaldab mingit R võtit. Teisiti öeldes: Boyce-Codd i normaalkuju nõuab, et muid mittetriviaalseid funktsionaalseid sõltuvusi pole kui need, kus võti määrab mingi tunnuse.
Seos 3NF ja B-C NF vahel Vt. eelmine, postiindeksi näide: saab olla 3NF, aga mitte olla B-C NF. Teoreem: Kui relatsioon R sõltuvuste perega F on B-C NF, siis on ta ka 3NF. Tõestus: vastuväiteline. Alati saab viia B-C NF nii, et dekompositsioonil on kadudeta ühendi omadus, aga ei saa alati säilitada F.
Relatsiooni viimine B-C NF Antud: R ja F Teeme samm-sammulise dekompositsiooni nii, et tal kogu aeg säilib kadudeta ühendi omadus. Esimene samm: leiame mõne X A, mis rikub B-C NF. Tähistame Y ülejäänud tunnused. Teeme dekompositsiooni kaheks: S1(X,A) ja S2( XY). On kadudeta ühendi omadusega. Nüüd rakendame sama reeglit S1 ja S2-le.
Näide: Koolitusfirma. Tema tegevust kirjeldab relatsioon F: K T Võti: AÕ Koolitus( Kursus, Tuutor, Aeg, Ruum, Õppur, Hinne) AR K K T A R Õ H AT R KÕ H AÕ R (K, T, A, R, Õ, H) rikub näit. KÕ H K,Õ H ( K, Õ, H) ( K,T, A, R, Õ) K T, AT R, AR K, AÕ R K T (K, T) (K, A, R, Õ) AK R, AR K, AÕ R! A,K R; A,R K (K, A, R) (K, A, Õ) AÕ K Saame peale dekompositsiooni 4 relatsiooni: ( Kursus, Õppur, Hinne) (Kursus, Aeg, Ruum) ( Kursus, Tuutor) (Kursus, Aeg, Õppur)
Miks see hea on? Tellija toob meile ülesande koolitusfirmale andmebaas luua. Nõuab relatsiooni: Koolitus (K, T, A, R, Õ, H) Teooria abil teeme 4 relatsiooni Teooria vastutab, et mistahes hetkel saame kadudeta kliendile esitada tema relatsiooni.
1., 2., 3.NF ja Boyce-Codd i normaalkujude vahekord 2.NF 3.NF 1.NF B-C.NF
Millal võib eirata 3NF? Kas meil on dünaamilised andmed? Kui ei, siis halb relatsioon pole väga halb. Kas päringutele vastamine on ajakriitiline? Kui jah, siis võime päringutele vastamiseks hoida vaate seisundit, parandada 3NF andmebaasi ja regulaarselt uuendada (öösel, nädalavahetusel) vaadet.
3NF andmeliiasus 3NF andmebaasis on relatsioonidel mingid ühised tunnused üle nende tehakse loomulik ühend. Ka see ühiste tunnuste hoidmine mitmes relatsioonis on teatud andmeliiasus. Kuidas seda andmeliiasust vähendada? Pange kõigile olemitüüpidele kunstlik, lühike ID. Loomulikud ühendid käiks üle selle kunstliku ID Kasutajavaadetes neid aga poleks.
Näide: Laulukoor (ID, Nimi, Liik) <102, Tarmak, segakoor> Dirigent (ID, Eesnimi, Perenimi,IK) <11, Urmas, Uljas, 3651001> Dirigeerib (ID, kooriid, digendiid, kuupäev) <1034, 102, 11, 14.05.2011> Seosteks kasutatakse 1-elemendilist lühikest ID-d.
Teooria ja näidete vahekord Teooria ehitatakse üles aksioomidest, defineeritud mõistetega, teoreemidega ja algoritmidega. Teooria kehtib ALATI, kui eeldused on täidetud. Mistahes väite saab ümber lükata, kui saab ehitada eeldustele vastava kontranäite. Teooriat ei saa üles ehitada näidetel näited illustreerivad ja aitavad teooriat mõista.
Kokkuvõte Projekteerimise käigus saame relatsioonid. Määrame nende funktsionaalsed sõltuvused F Määrame kõik võimalikud võtmed. Kontrollime, kas kõik relatsioonid on 3NF. Kui ei, teeme dekompositsioonid. Kontrollime, kas tulemused on 3NF? Kas annavad kadudeta ühendi ja kas säilitavad funktsionaalsed sõltuvused. Kontrollime, kas ka B-C NF, kui saame, siis viime.
Normaalkujude lõpetuseks Kas on muid, veel kangemaid normaalkujusid? Jah on. Aga need ei moodusta selle kursuse kohustuslike teadmiste osa. Kursuse Moodle materjalide viimasesse osasse lisan materjalid multisõltuvuste ja 4. normaalkuju kohta, ühendisõltuvuse ja 5. normaalkuju kohta, sisalduvussõltuvuse ja nende kõigi üldistuse kohta.
Graafilise mudeli teisendamine relatsiooniliseks
Graafilised mudelid Neid on mitut sorti Levinuimad: Entity-Relationship mudel UML klassimudel Kasutatakse palju vahendeid, mida relatsioonilises mudelis ei saa kasutada: korduvate väärtustega tunnused Struktuursed tunnused jne.
Probleem Meil on mistahes graafiline mudel, kuidas saame vastava relatsioonilise andmebaasi kirjelduse? Relatsioonid peavad kõik olema vähemalt 1. normaalkujus, sest ABJS pole vahendeid struktuursete ja korduvate tunnuste loomiseks
Kes vastutab 3. normaalkuju eest? Andmebaaside disainer Teisendab graafilise mudeli relatsioonide kirjeldusteks Määrab funktsionaalsete sõltuvuste pere iga relatsiooni jaoks Kontrollib, kas on 3. normaalkujus Vajadusel teeb dekompositsiooni Kui tarkvara teeb automaatse teisenduse, siis peab disainer aru saama: mida ja miks.
Täna keskendume mudeli teisendusele Vaja teisendada: Olemid nii tugevad kui nõrgad Seosed 1:1, 1:n ja n:m tüüpi Atribuudid liht-, korduvad? Struktuursed? Võtmed põhiliselt graafilise mudeli baasil, aga on ka eriolukordi
Algoritm 1. samm. Tugevate olemitüüpide teisendus. Igale tugevale olemitüübile seada vastavusse ühe relatsiooni kirjeldus. Kõik olemi lihtatribuudid lähevad relatsiooni atribuutideks. Liitatribuudid (nagu näiteks Aadress <Tänav, Maja, Korter, Linn, Indeks>) esitatakse oma komponentide kaudu, liittunnuse nimi kaob. Olemi võtmeatribuudid määrata võtmeteks ka relatsioonilises mudelis.
2.samm: Nõrkade olemitüüpide teisendus Igale nõrgale olemitüübile seada vastavusse üks relatsioon, milles esitada kõik selle olemi atribuudid lisaks temaga seotud eksistentsiaalse(te) olemi(te) võti (võtmed). Saadud relatsiooni võti moodustub tema enda atribuudist (atribuutidest) ja vastava(te) tugeva(te) olemi(te) võtme(te)st.
3.samm: 1:1 seoste teisendus Igale binaarsele 1:1 seosele E-R mudelis leiame temas osalevate olemitele vastavad relatsioonid, valime neist ühe ja lisame talle teise võtme. Kui seosel on tunnuseid, lisame samasse ka seose enda kõik elementaarsed atribuudid, Kui üks nendest olemitest on seoses totaalselt (täielikult, s.t. kõik tema eksemplarid on seosega hõlmatud), siis valimisel eelistame teda.
4.samm: 1:n seoste teisendus Iga 1:n seose jaoks leiame selle relatsiooni, mis esindab n-poolset olemit lülitame tema koosseisu nii teise osaleva olemi võtme kui ka seose enda kõik elementaarsed atribuudid.
5.samm: m:n seoste teisendus Iga m-n seose jaoks loome uue relatsiooni atribuutidena paneme sinna mõlema osaleva relatsiooni võtmed Loodud relatsiooni võtmeks on mõlema osaleva relatsiooni kõik võtmeatribuudid. Lisame relatsioonile kõik seose enda elementaarsed atribuudid, kui nad on olemas.
6.samm: Korduvate tunnuste ja gruppide teisendus Kui olemil leidub korduvaid tunnuseid või gruppe, siis loome iga sellise korduva grupi jaoks oma relatsiooni, võttes peale korduva grupi elementaarsete atribuutide sinna ka vastava olemi (seose) võtme. Kui ühel olemil on mitu korduvat gruppi, siis koostame uue relatsiooni igaühe jaoks neist eraldi.
7.samm: Enam kui 2 olemi vaheliste seoste teisendus Ärge tehke selliseid seoseid! Kui peate aga selliseid seoseid teisendama vaadake algoritmi seda sammu loengu tekstimaterjalidest.
Küsimused
1:1 seose kohta Otsustasite instituudi juhataja seosele isiku olemile lisada atribuudi juhatatav instituut. Mis on selle tunnuse väärtuseks nendel isikutel, kes instituute ei juhata? 1. Instituut, kus nad töötavad 2. Null-väärtus 3. Need isikud visatakse andmebaasist välja
1:n seose kujutamisel Algoritm ütleb, et n-poolsesse otsa lisatakse 1- poolse otsa võti. Kui seos on n-poolsest otsast mittetotaalne (s.t. osa n-otsa eksemplare ei ole seotud 1-otsa kirjega), siis mis lisatakse nende kirjete lisavälja(de) väärtuseks? 1. Juhusliku 1-otsa eksemplari võti 2. Null-väärtus 3. Sellised eksemplarid eemaldatakse andmebaasist
Küsimus 5. sammu kohta Kas 5 sammu (m:n seoste teisendamine) võib üks olemitest olla nõrk? 1. Ei tohi, sest siis ei ole tal võtit, mida uude relatsiooni lisada 2. Jah võib, võti tuleb nii, nagu 2. sammus määratud 3. Ei tea, ei oska
Nõrk olem ja korduv grupp Kui nõrgal olemil on korduv grupp (näiteks lapsel palju eesnimesid, mida on andmebaasis miskipärast eraldi vaja), siis millised olemi atribuudid tulevad uude, korduva grupi relatsiooni? 1. Nõrga olemi teised tunnused. 2. Nõrga olemi 2. sammu teisendusel määratud võti 3. Polegi muid tunnuseid peale korduva grupi oma tunnuste vaja
Näide ver.1 Piirkond Eesnimi Kuupäev Neljapäevak n n 1 Rajameister Perenimi Buss jah/ei IsikuKood Osaleb n Telefon Võistleja Võistl.klass Tulemus Eesnimi Mobiil Töötelefon Perenimi EOL-kood
Näide ver.2 Piirkond Eesnimi Kuupäev Neljapäevak 1 n 1 Rajameister Perenimi Buss jah/ei n IsikuKood 1 n Osaleb Telefon Võistleja Võistl.klass Tulemus Eesnimi Mobiil Töötelefon Perenimi EOL-kood
Näite teisendamise tulemus Neljapäevak ( Kuupäev, Piirkond, BussJah/ei, RM_IK) Rajameister ( Isikukood, Eesnimi, Perenimi, Mobiil, Töötelefon) Võistleja (EOL-kood, Eesnimi, Perenimi) Osalemine (N-kuupäev, V-EOL-kood, klass, Tulemus)
Koos paarilisega! Loengus jagatud materjalis on ülesanne (Töötaja, Osakond, Projekt, ) Võtke naabriga puhas paberileht, kirjutage (loetavalt) oma nimed paremasse ülemisse nurka ja teisendage see E-R mudel relatsiooniliseks.
LOENGU LÕPP