Uued mõisted. Tudeng peab olema suuteline selgitama järgmisi mõisteid: olem (nõrk- tugev; domineeriv-alluv), olemite klass, tunnused, seosed, nende tüübid, võti (võtme kandidaat, primaarne võti, supervõti), ER mudelite graafilised vahendid, UML klassimudelite graafilised vahendid. Oskused. Tudeng peab olema suuteline interpreteerima etteantud graafilist andmebaasi kontseptuaalset mudelit, selgitama tema kitsendusi. Koostama lihtsaid, 3-5 olemitüübiga graafilisi mudeleid talle tuntud valdkondade kohta. Eelmise loengu lühikokkuvõte Miks on vaja andmebaase? Andmebaasid kui andmekeskne vaade ülesannete kompleksile on vajalik, kuna tavalise, programmikeskse vaate puhul on järgmised halvad omadused: andmed on isoleeritud konkreetse programmi failidesse; tekib andmete dubleerimine; sellest andmete mittevastavus tegelikkusele; andmed kohandatakse ühe ülesande (mitte ülesannete kompleksi) vajadusele (näiteks tudengite fail organiseeritud ainult matrikli numbri järgi ja perekonnanimi järgi saab otsida ainult täisläbivaatusega); andmete struktuuri muutudes (matrikkel arvulisest tekstiliseks või lisandub mõni tunnus, näit. lugejapileti number) tuleb muuta programme, mis nende andmetega tegelevad (tavaliselt on neid palju); erinevad programmeerimissüsteemid kasutavad erinevaid failide formaate, mistõttu erinevates programmeerimiskeeltes kirjutatud rakendused ei saa samu faile kasutada; kui päringud on peidetud programmidesse, saab neid muuta ainult programmeerija, mitte kasutaja. Andmebaas mitme kasutaja huvides moodustatud, elektroonselt säilitatav, omavahel seotud andmete kogum, mis on koostatud ühe organisatsiooni (või selle osa) huve silmas pidades. Andmebaaside põhiprobleem: kuidas ehitada kõiki kasutajaid rahuldav andmemudel. 1. Andmemudeli loomine Mistahes infosüsteemi loomisel on aluseks kaks olulist mudelit: andmemudel (kirjeldab milliseid andmeid süsteemis säilitatakse, mis tüüpi ja milliste kitsendustega) ja funktsionaalne mudel (kirjeldab protsesse, mida andmetega tehakse, kuidas neid töödeldakse). Mõlema mudeli loomine järgneb analüüsi sammule, kui on kindlaks tehtud nõuded süsteemile. Nõuete määramise kohta on kursuse 2. nädala materjalide hulgas lisamaterjal. Selles kursuses vaatame andmemudeleid. Andmemudeli loomine on loominguline protsess, ei ole formaalset algoritmi, mis tagaks hea mudeli. Tavaliselt keskendutakse algul olemite, olemitüüpide ja olemitüüpidevaheliste seoste määramisele, seejärel fikseeritakse iga olemi võtmeatribuudid, ning siis lisatakse ülejäänud atribuudid. Kogu protsessi võib kirjeldada järgmiste sammude jadana: a. Olemite ja nendevaheliste seoste määramine. b. Esialgse graafilise mudeli skitseerimine. c. Esialgse mudeli täpsustamine. d. Võtmetunnuste lisamine. e. Ülejäänud tunnuste lisamine. f. Üldistamisseoste lisamine vajadusel. g. Kontroll (dubleerivad andmed, vajalike andmete olemasolu kontroll, kitsenduste kontroll jne.). 1
Kogu protsess ei ole rangelt järjestikune, vaid vajadusel pöördutakse eelnevate sammude juurde tagasi. Mudeli joonistamiseks kasutatakse graafilist esitust. Graafilist mudelit võib skitseerida käsitsi, aga viimastes staadiumites on soovitatav kasutada spetsiaalset tarkvara (Rational Rose, DBDesigner, Sybase PowerDesigner jne.), mis võimaldavad mudeli eksporti otse andmebaasi juhtimissüsteemi sisendiks. 2. Andmete modelleerimise põhiterminid Graafilised mudelid on loodud selleks, et andmete ja nendevaheliste seoste struktuuri kompaktselt ja ülevaatlikult kirja panna. Lihtsamatel juhtudel piisab ühel kirja pandud graafilisest mudelist. Keerulisematel juhtudel jagatakse mudel osadeks ja koostatakse mitu osamudelit. Graafilisi mudeleid kasutatakse laialt IT projekti osapoolte vahelises suhtluses, näit. andmebaasi projekteerija ja tellija vahelise kommunikatsioonivahendina. Kõige olulisemad on kaks terminit: Entity, eesti k. olem, (objekt) - reaalselt eksisteeriv ja identifitseeritav asi või nähtus; Relationship - seos mitme olemi vahel. Enne kui asume nende mõistete abil andmemudelit looma, teeme terminid endale täpsemalt selgeks. 2.1 Olem (ingl.k.entity) Olem (e. objekt) - reaalselt eksisteeriv ja antud ülesande kontekstis identifitseeritav asi või nähtus. Näited: raamat, inimene, eksam, tellimus. Tundub üsna lihtne mõiste, aga ega ei ole küll. Vt. raamat - mis on tegelikult olem, kas see üks konkreetne füüsiline raamat? Kuidas eristan teisest koopiast? Kas see on üks väljaanne? Kui aga väljaandeid on palju, isegi samade kirjastuste omi? Mis nendest on tegelikult konkreetse ülesande olemiks, sõltub ülesandest. Raamatulaenutuse ülesandes võime olemiks võtta kas füüsilise raamatu (siis on igale koopiale vaja oma kohaviita) või ühe väljaande (siis modelleerime koopiaid numbriliselt näiteks T.Pratchett Orikavana, 4 eksemplari, hoiame neid riiulil samas kohas, kui 1 välja laenatakse, muudame eksemplaride arvu andmebaasis 3-ks.). Ülesannete komplektiga, mida antud andmebaasiga hakatakse lahendama on määratud nende ülesannete jaoks mõistlike olemite hulgad. Näiteks raamatulaenutus võib tegeleda iga füüsilise raamatuga, kirjastuste tegevust huvitab väljaanne oma tiraažiga. Olemite klass. Kuna andmebaasid tegelevad ülesannetega, kus on palju sarnaste olemite kogumeid, siis oluliseks mõisteks on olemite klass (ingl.k.entity set). Olemite klass on samatüübiliste olemite hulk. Näiteks raamatute hulk raamatukogu komplekteerimise ja laenutuste ülesandes; üliõpilaste hulk teaduskonna eksamite-arvestuste ülesandes. Igal konkreetsel hetkel võib antud olemite klassis olla palju (mistahes arv) olemi eksemplare. Eksemplaride arv võib olla, ja reeglina ongi, ajas muutuv. Siit mõiste: klassi eksemplaride dünaamika. Eksemplaride lisamine-eemaldamine-parandamine - selleks peavad andmebaasides olema vahendid. Graafiline mudel ei tegele eksemplaridega, vaid ainult klassidega. Ühe ülesande olemite hulgad ei pea olema mittelõikuvad. Panga töötajate hulk ja panga klientide hulk võib olla ühisosaga, s.t. sisaldada samu inimesi. Magistrant (on kaheldamatult üliõpilane) võib osaleda õppetöös mitte ainult õppurina vaid ka praktikumide juhendajana. 2
Olem on andmebaasis esitatud oma tunnuste (atribuutide) kaudu. Näited tunnustest: üliõpilase perenimi, matriklinumber, pikkus, juuste värv, jne. Otsustamine, millised just on meid huvitava olemite tüübi tunnused, mida on vaja mudelisse võtta, ei ole lihtne. Näiteks: Kas ülikooli astuva tudengi poolt lõpetatud keskkooli/gümnaasiumi nimi on tudengi tunnus? Kas eesnimi on tunnus või olem? Ka selle määravad konkreetse ülesande (mille jaoks andmebaas luuakse) huvid. ÕIS-s on eesnimi isiku tunnus, nimede päritolu uurimise andmebaasis on eesnimi olem (oma tunnustega: päritolu kultuur, esimese teadaoleva kasutamise aeg, muganduse originaal jne.). Kaks abstraktsioonitaset: olemi klass, kui objekt ja - olemi eksemplar kui objekt. Võrdle konkreetse muutuja väärtus ja selle muutuja kirjeldust programmeerimises. Ka seal on tegu kahe erineva abstraktsiooniastmega. Konkreetse ülesande puhul on reeglina tegu paljude erinevate olemiklassidega. Näiteks klassid raamatulaenutuse ülesandest: raamat, lugeja, laenutus. Esimesed kaks - reaalsed füüsilised asjad, kolmas - tegevusakt, nähtus. 2.2 Seosed (ingl.k. relationship) Seos ühendab reeglina kahte olemitüüpi (siin kursuses me ei käsitle ternaarseid e kolme olemitüübi seost). Näited: üliõpilane ja tema poolt sooritatud eksamid; lugeja ja tema laenutused; üksikisik ja tema abikaasa; töötaja ja tema lapsed; auto ja tema omanik; auto ja selle autoga tehtud avariid. Seosel võivad olla oma tunnused: abikaasade seosel - abielutunnistuse number, lugeja raamatu laenamisel - viimase laenutuse kuupäev, jne. Kas ja missugused tunnused on vajalikud, tuleb otsustada ülesande huvidest lähtuvalt. Seosed võivad olla ka sama olemitüübi eksemplaride vahel. Näiteks: isik on teise isiku isa. Sellist, sama olemitüübi eksemplare siduvat seost nimetatakse rekursiivseks seoseks. Kas peaksime antud nähtust modelleerima seosena või võib seda modelleerida ka eraldiseisva olemina ka see on modelleerimisprobleem. Näiteks: kas laenutus on seos isiku ja raamatu vaheline seos või tuleb laenutus esitada eraldi olemitüübina, millel on tunnused: laenutuse kuupäev, tagastamise kuupäev jne ja mis on omakorda seotud laenutaja isiku ja laenatud raamatu olemiga? Otsus tuleb teha ülesandest sõltuvalt. Üks olemitüüp võib osaleda piiramatus arvus seostes. Räägitakse ka olemi rollist antud seoses. Näiteks seoses isik töötab antud osakonnas on isiku roll olla töötaja; seoses isik juhatab antud osakonda on isiku roll olla juhataja. Ülaltoodud rekursiivse esivanema seose puhul esineb olem isik kahes rollis on isa, on järeltulija. Seost saab iseloomustada mitmete omadustega: 1. Seose aarsus - mitu olemit ühest tüübist saab olla antud seoses. Nii klassifitseeritakse seosed 1: 1; 1 : n ja n : m seosteks. Süsteem võib anda ka vahendid minimaalse ja maksimaalse aarsuse määramiseks arvuliselt (näiteks: mitte alla 1; mitte üle 15). 2. Seose totaalsus - kui kõik olemi eksemplarid osalevad antud seoses, siis öeldakse, et seos katab olemi totaalselt v. täielikult (ingl.k. total relationship), vastasel juhul osaliselt (ingl.k. partial relationship). Totaaluses omadus iseloomustab seose ühe otsa olemitüüpi. Ilmselt kõik asutuse töötajad on seotud mingi allüksusega, aga ainult vähesed juhatavad allüksust (esimene seos katab töötajad totaalselt, teine osaliselt. 3
Seose omadusi saab kasutada mudelis esindatud andmete seisundi õigsuse kontrolliks (kui isikule tekkib teine abikaasa, on andmetega midagi valesti). Seepärast nimetatakse neid seose puhul deklareeritud omadusi mudeli kitsendusteks (ingl.k. constraints). Seose omadused on loomulikult modelleerimise küsimused mudel peab peegeldama reaalse maailma objektide vaheliste seoste omadusi. Olemitüüpidel saavad seostes olla erinevad rollid. Näiteks on võimalik, et osa olemeid saab eksisteerida ainult siis, kui vastav temaga seotud olem on olemas. Näiteks ühe tudengi eksami andemetel on mõte ainult siis, kui vastava tudengi enda andmed on ka olemas. Kui tudengi olem eemaldatakse süsteemist, siis koos temaga peaks eemaldatama ka tema eksamid. Selliseid seoseid, kus ühe olemitüübi eksemplaride olemasolu sõltub vastava teise olemitüübi eksemplari olemasolust, nimetatakse eksistentsiseosteks ja vastavat kitsendust eksistentsikitsenduseks. Üldiselt: kui olem x eksemplaride olemasolu sõltub olemi y eksemplari(de) olemasolust, siis x on seotud y-ga eksistentsiseosega. S.t. kui y eksemplar kustutatakse, siis kustutatakse ka temaga seotud x eksemplarid. Siin y on domineeriv olem (ingl.k. dominant entity) ja x alluv olem (ingl.k. subordinate entity). 2.3 Võtmed Olemi eksemplar andmebaasis esindab füüsiliselt identifitseeritavat objekti või nähtust reaalsest maailmast. Kui teda esindavad andmebaasis parajasti tema atribuudid, siis kuidas tagatakse kahe erineva olemi eristamine? Näited: kaks tudengit, mõlemal Jaan Kask nimeks; kaks õppejõudu, mõlemal Rein Jürgenson nimeks. Nende näidete puhul olemid ise on reaalses elus eristatavad ja me peame leidma vahendid, kuidas neid ka modelleerimisel eristada. Õnneks on riik huvitatud inimeste identifitseerimisest ja on loonud sellised tunnused nagu passinumber ja isikukood. Kui olem ei ole identifitseeritav (forell kaupluse letil teiste forellide seas, kirjaklamber karbis, jne), siis selliseid olemeid me ei modelleeri eraldi olemitena. Küll saame nende hulka modelleerida ühe olemina: kauplusesse saabunud kaup: forell, 325 kg, 7 /kg. Võti (ingl.k. key) on atribuut (või attribuutide kogum), mille väärtus(ed) üheselt määrab(/vad) olemi eksemplari antud tüüpi olemite hulgas. On täiesti selge, et kui atribuutide kogum K on võti, siis on seda ka mistahes K ülemhulk (saadakse K-le atribuutide lisamisega). Meid huvitab tihti minimaalne selline atribuutide hulk, mis on võti, s.t. selline atribuutide hulk, mille mistahes pärisalamhulk enam ei oleks võti. Seepärast nimetatakse võtmeks ainult neid minimaalseid võtme omadusega atribuutide hulki ja täiendatud hulki nimetatakse supervõtmeks (ingl.k.super key). Ühel olemil võib olla palju võtmeid. Näiteks tudengi isikukood, passi number, matriklinumber, lugejapileti number ja enamusel juhtudel ka tema ees- ja perekonnanimi koos sünnikuupäevaga - need kõik on võtmed. Viimane, nimedest ja sünnikuupäevast koosnev võti sobib mitmetunnuselise võtme näiteks. Et lihtsustada süsteemi tööd, määratakse nende võimalike võtmete seast üks olemi primaarseks võtmeks (ingl.k. primary key). Teisi nimetatakse võtmekandidaatideks (ingl.k. candidate key). Tavaliselt organiseeritakse andmekogum füüsiliselt primaarse võtme järgi s.t. Selle tunnuse väärtuse järgi saab vastava olemi eksemplari kiiresti (ilma kõiki eksemplare läbi vaatamata) kätte. 4
On võimalik moodustada olemite kogumeid, millel puudub primaarne võti, millel üldse puudub võti. Kui isikuandmetes puuduvad passiandmed, siis nimed ja sünnikuupäev ei pruugi olla piisavad iga isiku üheseks identifitseerimiseks. Raamatukogudes on tihti sama kohaviidaga mitu antud raamatu eksemplari ja ühte konkreetset füüsilist raamatut ei saagi tunnuste kaudu identifitseerida. Kui rahaülekannet antud arveldusarvelt iseloomustab ainult ülekande number (mis on küll unikaalne antud arvelt tehtud ülekannete hulgas, aga mitte kogu panga kõigi ülekannete hulgas), siis ülekanne ei ole selle numbri järgi üheselt identifitseeritav. Selliseid olemite kogumeid, millel ei ole võtit, nimetatakse nõrkadeks olemikogumiteks (ingl.k. weak entity sets). Primaarse võtmega olemit nimetatakse siis tugevaks olemiks. Mõisted tugev-nõrk olem on seotud mõistetega domineeriv-alluv olem: ainult tugev olem saab olla domineeriv, nõrk olem peab olema vähemalt ühes seoses alluv olem. Nõrgal olemil peab olema tunnus (või tunnuste hulk), mille väärtused lubavad eristada ühe tugeva olemi juurde kuuluvaid nõrku olemeid omavahel. Nõrgale olemile saame tüüpiliselt moodustada võtme temaga eksistentsiaalselt seotud tugeva olemi võtme lisamise teel tema mingile tunnusele. Näiteks arveldusarve numbri lisamisel ülekande numbrile, saame ülekande üheselt kogu panga ulatuses identifitseerida. Sama lugu on tudengi eksamitega: kui eksami olemis on kirjas ainult kuupäev, ainekood ja hinne, siis koos temaga seotud tugeva olemi tudeng võtmega 'matriklinumber', moodustab paar ainekood, matriklinumber tüüpiliselt võtme. (Millal see nii ei ole?) Ka seosed võivad omada võtmeid. Kui seose mõlemas otsas on tugevad olemid, tuleb võtta vastavate olemite primaarsed võtmed ja nad moodustavad seose üheseks identifitseerimiseks vajaliku võtme. Mida teha, kui seose üks osaline on nõrk olem? 3. Graafiliste mudelite ülesmärkimise vahendid Graafiliste mudelite kujusid on palju. Enamlevinud on neist kaks: E-R mudel (millel on endal mitu ülesmärkimise viisi) ja UML klassimudel. Vaatame mõlemaid lähemalt. 3.1 E-R mudel E-R mudelitest ongi olemas ainult graafiline kuju. Neid kasutatakse mudeli esimese lähendi esitamiseks, et pärast teisendada see mingile muule kujule. Olemi tüüpi tähistatakse ristkülikuga, tunnused (atribuute) ovaalidega. Jooni kasutatakse nii atribuutide sidumiseks olemitüübiga mille tunnused nad on, kui ka olemitüüpide sidumiseks omavahel. Seostele olemite vahel pannakse romb, et sinna kirjutada seose nimi. Iga skeemi element peab omama nime. Osakond Juhatab Isik Osakonnanimi Number Eesnimi Perenimi IK 5
Et kõiki kirjeldatud mõisteid ka graafiliselt saaks kujutada, kasutatakse järgmisi tähistusi: Olem nõrk olem seos atribuut multiväärtustega atribuut Mitme elemendiga atribuut arvutatav e. virtuaalne totaalne seos atribuut Näide: SOTL Ship_of_the_line laeva tüüp 6
Kasutatakse mitmesuguseid graafilisi esitusi : Leidub palju E-R mudeli edasiarendusi. Hilisemad kannavad nime EER-mudel e. Enhanced Entity-Relationship model täiendatud ER mudel. Ülesanne: võtke kaks omavahel seotud mõistet ja püüdke neid modelleerida E.-R vahenditega. Näiteks: raamat ja selle autor, üliõpilane ja tema juhendaja, ruumid hoones ja neis paiknevad statsionaarsed arvutid, jne. Olete ülesandele valesti lähenenud, kui teie kahe olemi vahel polegi mingit seost. Kas vahel on üks või mitu seost? Kas seos on 1-1, 1-n, n-1 või n-m tüüpi? E-R mudeli ajaloost E-R mudeli pakkus välja P.Chen 1976.a. Kuigi algselt oli idee ühendada selleks ajaks juba väljakujunenud hierarhiline ja võrkmudel ja unifitseerida nende vahendid, on E-R mudel praegu tuntud põhiliselt kui süsteemianalüüsi ja andmebaasi konstrueerimise esimeste etappide vahend. Teda on püütud siduda protsesside kirjeldamise vahenditega ja välja töötatud meetodid tema baasil objekt-orienteeritud mudel saamiseks. Toimuvad iga-aastased E-R mudelile pühendatud konverentsid. Ülesandeid mõtlemiseks: 1. Mille poolest E-R mudelis käsitletav olemi tüübi mõiste erineb näiteks programmeerimises käsitletavast andmetüübi mõistest? 2. Millise ülesande lahendamiseks on vaja olemiks võtta konkreetne füüsiline raamat (sama raamatu teine koopia on teine olem)? Millisele ülesandele võiks vaja minna raamatu ühe väljaande olemit? 3. Kuidas modelleerida seoseid ÕIS-i järgmiste olemite vahel: Aine, Õppejõud, Tudeng, Eksam/arvestus. 4. Olgu Tudeng olemitüüp, mille eksemplarideks on kõik TÜ tudengid. Genereerige niipalju rekursiivseid seoseid nende vahele, kui suudate (võite teatava piirini eirata reaalsust). 3.2 UML klassimudel UML (Universal Modelling Language) on graafiliste vahendite komplekt, mis katab tarkvaratehnoloogia vajaduse mudelite järele. Selles komplektis on 13 mudelite tüüpi, millest antud kursuses tutvume ainult ühe: klassimudeliga. 7
Klassi mudel: Annab terminite sõnastiku nii IT meeskonna jaoks kui tellijaga suhtlemiseks Saame üksteisest aru, millest üldse räägime. Annab esimese mustandi andmebaasi skeemi loomise jaoks. Klassi diagramme kasutatakse nii analüüsis kui disaini etapis. Klassimudel on kõige enam kasutatav mudelitüüp UML-perekonnast. Klassi mudeli süntaks Olemeid kirjeldatakse ristkülikuna, mis üldjuhul jagatud 3 osaks: 1. olemi tüübi nimi 2. tema atribuudid, igal tüüp ja tunnus, kas on + avalik, - privaatne, # - kaitstud, võib puududa. 3. meetodid (mis andmemudelite skitseerimise etapis võivad puududa) Näiteks: Tudeng # Matrikli number + Eesnimi +Perekonnanimi + Sünnikuupäev ID-kaardi number Vanus () Seosed esitatakse joonega, kuhu peale kirjutatakse seose nimi ja otstesse aarsus. Viimane näitab, mitu antud olemi tüübi eksemplari võib antud seosega seotud olla. Võimalused: 0..1 kas 0 või 1 n..m n kuni m 1 parajasti 1 1..* vähemasti 1 0..* arv pole piiratud 8
Näide selgitustega e. puust ja punaselt : (http://www.togethersoft.com/services/practical_guides/umlonlinecourse/#classdiagrams) NB! Seosetüüpide puhul kasutatavaid tähistusi on mitmeid, enne kui asute mingit skeemi lugema, peate aru saama, millist tähistust kasutatakse. Järgnev on üks sageli esinev tähistuste komplekt. Tähistus, kus asemel kasutatakse 9
Kokkuvõtteks veel üks levinud tähistus: Olem ja tema atribuudid Parajasti üks olemi eksemplar osaleb seoses Seoses osaleb kas üks või mitte ühtegi antud olemi eksemplari Üks või enam olemi eksemplari osaleb seoses Seoses osaleb kas mitte ühtegi, üks või mitu olemi eksemplari Seoses osaleb mitu olemi eksemplar 10