Andmebaasid I - Teema nr. 11 - ttü informaatikainstituut
Andmebaasid I - Teema nr. 11 - ttü informaatikainstituut
Andmebaasid I - Teema nr. 11 - ttü informaatikainstituut
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
TTÜ: Andmebaasisüsteemid (2012) © Erki Eessaar<br />
Sisukord<br />
<strong>Teema</strong> <strong>11</strong>. Andmebaasisüsteemid<br />
1. Eesmärgid......................................................................................................1<br />
2. Andmebaasisüsteemi kolmekihiline arhitektuur............................................2<br />
2.1 Väline tase................................................................................................5<br />
2.2 Kontseptuaalne tase................................................................................5<br />
2.3 Sisemine tase...........................................................................................5<br />
2.4 Relatsiooniline mudel ja ANSI/SPARC arhitektuur..................................6<br />
2.1 Andmebaasi skeem..................................................................................7<br />
2.2 Andmete sõltumatus................................................................................7<br />
3. Andmebaasisüsteemi funktsioonid................................................................8<br />
4. Andmebaasisüsteemi komponendid............................................................10<br />
4.1 Süsteemikataloog...................................................................................12<br />
4.2 Information Resource Dictionary System (IRDS)..................................15<br />
4.3 SQL lause töötlemine.............................................................................17<br />
5. SQL keskkond..............................................................................................22<br />
6. Andmebaasisüsteemide liigitus...................................................................24<br />
6.1 Töölaua (desktop) andmebaasisüsteemid.............................................24<br />
6.1.1 MS Access.......................................................................................24<br />
6.2 Serveri andmebaasisüsteemid...............................................................27<br />
6.2.1 Oracle Enterprise Edition.................................................................28<br />
6.3 Üleminekusüsteemid..............................................................................29<br />
6.4 Manusandmebaasisüsteemid................................................................30<br />
7. Millal on andmebaasisüsteem relatsiooniline?............................................31<br />
8. SQL-andmebaasisüsteemid........................................................................33<br />
9. Andmebaasisüsteemi valiku kriteeriume.....................................................33<br />
10. Mõisted.......................................................................................................36<br />
<strong>11</strong>. Kasutatud materjalid..................................................................................36<br />
Joonised<br />
1. Eesmärgid......................................................................................................1<br />
2. Andmebaasisüsteemi kolmekihiline arhitektuur............................................2<br />
3. Andmebaasisüsteemi funktsioonid................................................................8<br />
4. Andmebaasisüsteemi komponendid............................................................10<br />
5. SQL keskkond..............................................................................................22<br />
6. Andmebaasisüsteemide liigitus...................................................................24<br />
7. Millal on andmebaasisüsteem relatsiooniline?............................................31<br />
8. SQL-andmebaasisüsteemid........................................................................33<br />
9. Andmebaasisüsteemi valiku kriteeriume.....................................................33<br />
10. Mõisted.......................................................................................................36<br />
<strong>11</strong>. Kasutatud materjalid..................................................................................36<br />
1. Eesmärgid<br />
• Anda ülevaade kolmekihilisest andmebaasisüsteemi arhitektuurist.<br />
• Anda ülevaade andmebaasisüsteemi poolt pakutavatest funktsioonidest ja<br />
teenustest.<br />
1
TTÜ: Andmebaasisüsteemid (2012) © Erki Eessaar<br />
• Anda ülevaade tüüpilise andmebaasisüsteemi komponentidest.<br />
• Anda ülevaade nõudmistest, mille täidetuse korral on andmebaasisüsteem<br />
relatsiooniline.<br />
• Kirjeldada, mille poolest erinevad serveri andmebaasisüsteemid ja töölaua<br />
andmebaasisüsteemid.<br />
• Nimetada olulisemad andmebaasisüsteemid.<br />
2. Andmebaasisüsteemi kolmekihiline arhitektuur<br />
Mis on andmebaasisüsteem? (vt. teema 1)<br />
“Andmebaasisüsteem on tarkvara, mille abil saab andmebaase luua ja<br />
kasutada. Tal on ka andmeuuendamiseks ja -hoolduseks vajalikud<br />
funktsioonid.” (Mikli, 1999)<br />
"Andmebaasisüsteem on tarkvarasüsteem, mis kontrollib kogu juurdepääsu<br />
ühele või mitmele andmebaasile." (Date, 2006)<br />
Andmebaasisüsteem != andmebaas<br />
Süsteemi arhitektuur on süsteemi moodustavate objektide ja nende seoste<br />
abstraktne struktuur. Järgnevalt vaatleme lähemalt ANSI/SPARC (Standards<br />
Planning and Requirements Committee of the American National Standards<br />
Institute) poolt 1975. aastal väljapakutud andmebaasisüsteemide arhitektuuri.<br />
Nimetatud arhitektuur ei muutunud standardiks, kuid on praeguseni aktuaalne<br />
– tegu on ideaaliga, mida andmebaasisüsteemid võiksid võimalikult täpselt<br />
järgida. Pakutud arhitektuuriline lahendus jagab andmebaasi kolmeks<br />
tasemeks (kihiks):<br />
väline;<br />
kontseptuaalne;<br />
sisemine.<br />
Ka andmebaasisüsteemi sisemist ülesehitust võib vaadata<br />
mitmetasemelisena. Iga andmebaasi taseme jaoks leidub ka vastav<br />
andmebaasisüsteemi tase (alamosa), mis hoolitseb sellele andmebaasi<br />
tasemele kuuluvate elementide haldamise eest. Millised on selle arhitektuuri<br />
kasutamise eesmärgid?<br />
- Igal kasutajal peaks olema oma vaade andmetele. Ta peaks nägema just<br />
neid andmeid, mida tal on vaja ja just sellisel kujul nagu tal on vaja.<br />
Kasutaja vaateid andmetele peaks saama muuta nii, et see ei mõjuta<br />
teiste kasutajate vaateid.<br />
- Kasutajad ei peaks tegelema otse andmete füüsilise salvestamise<br />
detailidega. Kasutaja pöördumine andmebaasi poole ei tohi sõltuda<br />
andmete salvestamise viisist. Näiteks kui andmebaasi administraator<br />
muudab andmete kõvakettale paigutamise põhimõtteid, siis ei ole vaja<br />
ümber kirjutada andmekäitluskeele lauseid millega selle andmebaasi<br />
poole pöördutakse. Andmebaasi kasutava programmi programmeerija ei<br />
pea teadma midagi sellest, millises kõvaketta sektoris, plokis e. leheküljel<br />
ja ekstendis e. plokkide kogumis andmed asuvad, kuidas neile kõige<br />
2
TTÜ: Andmebaasisüsteemid (2012) © Erki Eessaar<br />
paremini ligi pääseda ning milliseid indekseid oleks konkreetsel juhul kõige<br />
parem kasutada. Selle asemel peidetakse see keerukus andmete<br />
kasutajate eest ja neile pakutakse teatud meetodid (väravad/lüüsid), mille<br />
kaudu saab andmebaasist andmeid küsida. Kasutajate päringutele<br />
vastamise viis on andmebaasisüsteemi siseasi. Selle väljamõtlemise ja<br />
realiseerimisega tegelevad andmebaasisüsteemi arendajad. NB! Tuleb<br />
küll tunnistada, et mõnedes tänapäeva andmebaasisüsteemides saab<br />
näiteks päringuid kirjutada niimoodi, et päringu süntaksi abil juhitakse<br />
päringu täitmise moodulit indeksi kasutamisele või vastupidi välistatakse<br />
indeksi kasutamine. Sellistes süsteemides ei ole sisemine tase teistest<br />
tasemetest täiesti sõltumatu. Probleemi näide – kui toimub<br />
andmebaasisüsteemi versiooniuuendus, siis tuleb üle kontrollida kas kõik<br />
eelnevalt kirjutatud "kavalad" andmekäitluskeele laused töötavad uues<br />
olukorras oodatud viisil.<br />
- Andmebaasi administraator peab saama muuta andmebaasi salvestusstruktuuride<br />
juhtparameetrite väärtuseid (andmete füüsilise<br />
salvestamise detaile) mõjutamata selle tulemusena kasutaja vaadet<br />
andmetele.<br />
- Andmebaasi administraator peab saama muuta andmebaasi<br />
kontseptuaalset struktuuri ilma kasutajaid mõjutamata. Kasutaja<br />
kasutab andmeid läbi vaadete. Kui andmebaasi kontseptuaalne struktuur<br />
muutub, siis muudetakse vaate definitsiooni nii, et kasutaja näeb endiselt<br />
samasuguseid andmeid.<br />
3
TTÜ: Andmebaasisüsteemid (2012) © Erki Eessaar<br />
Joonis 1Andmekeskse süsteemi kolmekihiline arhitektuur (Date, 2003 lk.<br />
37).<br />
Andmebaasi struktuuri ja käitumise määravad elemendid, mis paiknevad<br />
välisel ning kontseptuaalsel tasemel, on määratud ära andmemudeliga, mille<br />
põhjal on andmebaasisüsteem loodud. Andmemudel on (Date, 2006) järgi<br />
abstraktne ja loogiline andmetüüpide, andmestruktuuride, andmetega seotud<br />
kitsenduste ning andmete töötlemiseks kasutatavate operaatorite<br />
spetsifikatsioon. Üheskoos moodustavad eelpool loetletud objektid abstraktse<br />
masina, millega andmebaasi kasutajad suhtlevad. Teisiti öeldes kirjeldab<br />
andmemudel andmebaasi ehitusplokid, reeglid, mis kehtivad plokkidest<br />
kokkupandud struktuuridele ning operatsioonid mida nende struktuuride<br />
põhjal saab teostada. Iga taoline andmemudel on aluseks paljude<br />
andmebaaside koostamisele.<br />
Näiteks kui andmebaasisüsteem järgib SQL poolt kirjeldatavat andmemudelit,<br />
siis välisele tasemele kuuluvad virtuaalsed tabelid e. vaated ning<br />
kontseptuaalsele tasemele kuuluvad baastabelid ning baastabelitele<br />
rakenduvad kitsendused.<br />
Andmebaasisüsteem peab teadma, milline on erinevatel tasemetel paiknevate<br />
elementide omavaheline vastavus. Näiteks SQL andmemudeli järgi loodud<br />
andmebaasi korral peab andmebaasisüsteem teadma milliste baastabelite<br />
4
TTÜ: Andmebaasisüsteemid (2012) © Erki Eessaar<br />
põhjal on loodud virtuaalsed tabelid ning millistes andmefailides hoitakse<br />
baastabelite andmeid. Need vastavused on kirjeldatud andmebaasi<br />
süsteemikataloogis (vt. ptk. 4.1).<br />
2.1 Väline tase<br />
Välist taset tuntakse ka nime all kasutaja loogiline tase. Väline tase<br />
määratletakse väliste skeemide abil. Väline tase pakub iga kasutaja jaoks<br />
komplekti vaateid andmebaasis olevatele andmetele. Vaated võimaldavad<br />
kasutajal näha ja muuta vaid selliseid andmeid, mis on tema jaoks olulised.<br />
Ülejäänud andmed on tema eest peidetud. Erinevad kasutajad võivad<br />
andmeid näha erineval kujul. Näiteks üks kasutaja võib näha toodete hindu<br />
eurodes ja teine eurodes ning Eesti kroonides. Vt. teema 5 vaadete kohta.<br />
Kasutajaks on enamasti rakendusprogramm, mis on kirjutatud mingis<br />
programmeerimiskeeles (Java, C++, Visual Basic, PHP jne.).<br />
Rakendusprogramme kasutavad omakorda inimesed (lõppkasutajad).<br />
Kasutaja suhtleb andmebaasiga mingis kõrgtaseme andmebaasikeeles nagu<br />
näiteks SQL. SQL standard kirjeldab ka reeglid (Embedded SQL), kuidas<br />
SQLi kõrgtaseme protseduursetes programmeerimiskeeltes kasutada.<br />
Välise ka kontseptuaalse skeemi projekteerimise eest vastutab andmebaasi<br />
loogiline disainer. Välisel tasemel töötab ka rakenduse programmeerija, kes<br />
loob andmebaasi kasutavaid programme.<br />
2.2 Kontseptuaalne tase<br />
Kontseptuaalset taset tuntakse ka nime all loogiline tase. Kontseptuaalset<br />
taset kirjeldab kontseptuaalne skeem. Kontseptuaalne skeem kirjeldab<br />
andmebaasis hoitavate andmete struktuuri ning nende andmetega seotud<br />
kitsendused. Kontseptuaalne skeem sisaldab andmebaasi loogilist kirjeldust,<br />
mis on vaba andmete füüsilise salvestuse probleemidest.<br />
Kõik andmed, millele pääseb ligi läbi välises skeemis kirjeldatud vaadete<br />
peavad olema kirjeldatud kontseptuaalses skeemis.<br />
2.3 Sisemine tase<br />
Seda tuntakse ka nime all "salvestustase". Seda kirjeldab sisemine skeem.<br />
Sisemine skeem kirjeldab, kuidas on andmed arvutis füüsiliselt salvestatud.<br />
Ta kirjeldab näiteks.<br />
- Andmete salvestamiseks kasutatav formaat. Näiteks kuupäeva "7. juuli<br />
2007" võib salvestada kui kümnest märgist koosneva stringi 07/07/2007<br />
või kui arvu, mis näitab mingist kindlast kuupäevast möödunud päevade<br />
arvu.<br />
- Millistes failides on andmed salvestatud.<br />
5
TTÜ: Andmebaasisüsteemid (2012) © Erki Eessaar<br />
- Kas andmeid on ruumi kokkuhoiu mõttes pakitud.<br />
Andmebaasisüsteemi sisemine tase kasutab operatsioonisüsteemi kettale<br />
juurdepääsu meetodeid, et salvestada ja küsida andmeid ning hallata<br />
indekseid.<br />
Järgnevalt kirjeldatakse lühidalt tänapäeva andmebaasisüsteemide sisemise<br />
taseme ülesehituse põhimõtteid. Tuleb öelda, et selline ülesehitus ei ole<br />
ainuvõimalik ja näiteks kõiki andmeid muutmälus hoidvatel<br />
andmebaasisüsteemidel on sisemise taseme ülesehitus teistsugune.<br />
Ühe andmebaasi andmed on salvestatud ühte või rohkemasse andmefaili.<br />
Andmefailid on salvestatud kõvakettale. Andmefailid koosnevad plokkidest<br />
e. lehekülgedest. Plokk on minimaalne sisend/väljund operatsiooni ühik, see<br />
tähendab andmete lugemine kõvakettalt muutmällu (RAM) ning kirjutamine<br />
muutmälust kõvakettale toimub plokkide kaupa. Selle suurus on erinevates<br />
andmebaasisüsteemides erinev aga jääb enamasti vahemikku 1KB – 64 KB<br />
(näiteks Oracles vaikimisi 8 kB). Kui kasutaja pöördub andmebaasisüsteemi<br />
poole, siis tema poolt vajatud andmeid sisaldavad plokid loetakse muutmällu.<br />
Andmete kiiremaks leidmiseks võib süsteem kasutada indekseid. Indeksi<br />
kasutamise eelduseks on indeksi olemasolu ning andmebaasisüsteemi otsus,<br />
et selle kasutamine on antud olukorras otstarbekas.<br />
Kui andmetes tehakse muudatus, siis see tehakse kõigepealt muutmälus<br />
olevates plokkides. Andmete muutmise käigus genereerib<br />
andmebaasisüsteem ka logikirjeid toimunud muudatuse kohta. Logikirjete<br />
alusel saab veaolukorra tekkimisel taastada andmebaasis olevad andmed<br />
korrektses seisundis (tühistades osa andmemuudatusi ja tehes osa<br />
andmemuudatusi uuesti). Andmebaasisüsteem peab nii genereeritud logi kui<br />
ka muudetud andmeplokid kõvakettale salvestama. Logikirjed salvestatakse<br />
ühte või rohkemasse logifaili. Andmebaasisüsteem järgib alati reeglit, mille<br />
kohaselt andmemuudatuse kohta genereeritud logikirjed salvestatakse<br />
kõvakettale varem kui selle muudatuse käigus muudetud andmeid sisaldavad<br />
plokid. Andmeplokkides tehtud muudatused võivad tingida ka vajaduse muuta<br />
andmeid ühes või rohkemas indeksis. Ka selle kohta tuleb genereerida ja<br />
salvestada logi.<br />
Sisemise taseme probleeme lahendab andmebaasi administraator koostöös<br />
andmebaasi füüsilise disaineriga.<br />
2.4 Relatsiooniline mudel ja ANSI/SPARC arhitektuur<br />
Relatsioonilise mudeli poolt ette nähtud elemendid kuuluvad välisesse<br />
ja kontseptuaalsesse tasemesse ning nende kirjeldused sisalduvad<br />
välises ning kontseptuaalses skeemis.<br />
Kontseptuaalsel tasemel näeb andmebaasi kasutaja relvare ja nende<br />
kasutamiseks mõeldud operaatoreid.<br />
6
TTÜ: Andmebaasisüsteemid (2012) © Erki Eessaar<br />
Relatsiooniline mudel näeb ette ka virtuaalsete relvaride e. vaadete<br />
kasutamise, mis pakuvad vaate andmebaasis olevatele andmetele (st.<br />
realiseerivad välimise taseme).<br />
Sisemine tase ei ole relatsiooniline. Sisemise taseme struktuurid peavad<br />
võimaldama kasutada kõiki relatsioonilises mudelis ette nähtud<br />
kontseptuaalse ja välise taseme elemente. Relatsiooniline mudel ei kirjuta<br />
ette, millised peaksid olema sisemise taseme struktuurid. Näiteks Date (20<strong>11</strong>)<br />
kirjeldab trans-relatsioonilist mudelit, mis on üks võimalik mudel, mille alusel<br />
saaks organiseerida relatsioonilise andmebaasi andmete sisemisel tasemel<br />
salvestamise.<br />
2.1 Andmebaasi skeem<br />
Andmebaasi üldist kirjeldust nimetatakse andmebaasis skeemiks.<br />
Andmebaasi skeem luuakse andmebaasi loomise käigus. See muutub, kui<br />
muudetakse andmebaasi struktuuri. Andmebaasis mingil hetkel olevaid<br />
andmeid nimetatakse andmebaasi eksemplariks. Seega ühele andmebaasis<br />
skeemile võib vastata mitu erinevat andmebaasi eksemplari (st. andmebaasi,<br />
millel on sama struktuur, kuid kus on erinevad andmed).<br />
Date(2003) kasutab terminit andmebaasi muutuja (dbvar), mille väärtuseks on<br />
antud hetkel andmebaasis olevate relvaride väärtused.<br />
2.2 Andmete sõltumatus<br />
Andmebaasi madalamatel tasemetel tehtud muudatused ei tohi muuta seda,<br />
kuidas kõrgemate tasemete kasutajad peavad andmebaasi poole pöörduma.<br />
See lihtsustab infosüsteemide loomist, sest muudatuste korral andmebaasis<br />
väheneb vajadus muuta andmebaasi kasutavaid programme. Eristatakse<br />
kahte liiki andmete sõltumatust:<br />
loogiline andmete sõltumatus;<br />
füüsiline andmete sõltumatus.<br />
Loogiline andmete sõltumatus tähendab, et andmebaasi kontseptuaalses<br />
skeemis tehtud muudatus ei mõjuta andmebaasi välist skeemi. Kui kasutajad<br />
pöörduvad andmebaasi poole läbi vaadete, siis saab vaadete ja<br />
kontseptuaalse skeemi elementide vahelist vastavust muutes varjata nende<br />
eest kontseptuaalsel tasemel toimunud muudatusi. Kommentaariks tuleb<br />
öelda, et loogilise sõltumatuse saab tagada vaid juhul, kui kontseptuaalses<br />
skeemis tehtud muudatus ei vähenda faktide hulka mida andmebaasis on<br />
võimalik registreerida. Näiteks oletame, et meil on andmebaas kus<br />
salvestatakse andmeid osakondade ja nendes töötavate isikute kohta. Kui<br />
otsustame loobuda osakondade andmete registreerimisest ning teeme<br />
vastavad muudatused kontseptuaalses skeemis, siis ei ole seda muudatust<br />
võimalik varjata andmebaasi välise taseme kasutajate eest, kes kasutavad<br />
osakondade andmeid. Need kasutajad, kes osakondade andmeid ei vaja, ei<br />
näe andmebaasis mingit muutust.<br />
7
TTÜ: Andmebaasisüsteemid (2012) © Erki Eessaar<br />
Füüsiline andmete sõltumatus tähendab, et andmebaasi sisemises skeemis<br />
tehtud muudatus ei mõjuta andmebaasi kontseptuaalset skeemi. Näiteks uue<br />
indeksi kasutuselevõtmine ei mõjuta SQL-andmebaasis baastabeli struktuuri<br />
ja kasutamist. Tabeli kasutaja võib tunda vaid muutust töökiiruses (mõnede<br />
operatsioonide töökiirus võib suureneda, mõnede oma aga hoopis väheneda).<br />
3. Andmebaasisüsteemi funktsioonid<br />
1. Andmebaasisüsteem peab pakkuma kasutajatele võimalust luua<br />
andmebaasi ja muuta selle struktuuri ning lisada sellesse andmeid, otsida<br />
sealt andmeid ja muuta seal andmeid. Selleks otstarbeks peaks<br />
andmebaasisüsteem pakkuma kasutajale programmeerimiskeele, mis<br />
koosneb järgmistest alamkeeltest.<br />
• Data Definition Language (DDL) – andmekirjelduskeel.<br />
• Data Manipulation Language (DML) – andmekäitluskeel.<br />
• Data Control Language (DCL) – andmekontrolli keel (mõnikord loetakse<br />
andmekirjelduskeele osaks).<br />
2. Andmebaasisüsteem peab omama kataloogi, mis sisaldab<br />
andmebaasiobjektide kirjeldust ja mis on kasutajatele kättesaadav.<br />
3. Andmebaasisüsteem peab tagama transaktsioonide e. tehingute<br />
läbiviimise. Transaktsioon e. tehing SQL-andmebaasis<br />
(SQL-transaktsioon) on järjestatud hulk operatsioone (SQL lausete<br />
käivitamisi), mis on taastamise suhtes atomaarne. Transaktsiooni<br />
omadused.<br />
• Atomaarsus: andmetes tehakse kõik transaktsioonis määratud<br />
muudatused või ei tehta ühtegi.<br />
• Terviklikkus: Transaktsiooni tehtud muudatused ei tohi viia andmebaasi<br />
ebakorrektsesse seisundisse. Transaktsiooni täitmise järel peavad kõik<br />
andmetega seotud kitsendused olema täidetud.<br />
• Isolatsioon: Paralleelselt toimuvate transaktsioonid ei tohi näha<br />
üksteise kinnitamata vahetulemusi. Transaktsiooni T käigus tehtud<br />
muudatused muutuvad teistele transaktsioonidele nähtavaks alles peale<br />
T kinnitamist.<br />
• Kestvus: Peale transaktsiooni lõppu peab andmebaasisüsteem andmed<br />
püsivalt salvestama.<br />
4. Andmebaasisüsteem peab tagama andmete õige muutmise, kui mitu<br />
kasutajat kasutavad andmebaasi (loevad andmeid ja muudavad andmeid)<br />
samaaegselt.<br />
5. Andmebaasisüsteem peab oskama peale andmebaasi kahjustanud<br />
sündmust seda korrektses seisundis taastada. Vigade põhjuste näited.<br />
- "System crash". Tark- või riistvara vead. Põhjustavad põhimälus olevate<br />
andmete kadumise.<br />
- Andmekandja riknemine.<br />
- Vead rakenduse tarkvaras, mis põhjustavad ühe või mitme transaktsiooni<br />
ebaõnnestumise.<br />
- Loodus- või inimkatastroofid.<br />
8
TTÜ: Andmebaasisüsteemid (2012) © Erki Eessaar<br />
- Hooletusest või kogemata andmete või seadmete hävitamine.<br />
- Sabotaaž.<br />
Vigade võimalik tulemus andmebaasi seisukohast.<br />
- Muutmälus olevate andmete kaotus.<br />
- Kõvakettal oleva andmebaasi koopia kaotus.<br />
Andmebaasist tehakse pidevalt varukoopiaid erinevatele andmekandjatele.<br />
- Kõvaketas<br />
- Väline kõvaketas.<br />
- Magnetlindid<br />
- Optilised kettad<br />
Andmebaasisüsteem peab oskama varukoopia põhjal andmebaasi taastada.<br />
6. Andmebaasisüsteem peab lubama juurdepääsu andmebaasile vaid<br />
selleks õigust omavate kasutajate. Andmebaasisüsteem peab võimaldama<br />
kasutajatel teha andmebaasis vaid selliseid tegevusi, milleks talle on antud<br />
õigused.<br />
7. Andmebaasisüsteem peab lubama programmidel andmebaasi kasutada,<br />
ilma et nad oleksid sõltuvad andmebaasi sisemisel tasemel tehtud<br />
muudatustest.<br />
8. Andmebaasisüsteem võib pakkuda mitmesuguseid lisateenuseid.<br />
Järgmisena vaatleme nende näiteid.<br />
- Andmebaasis toimuvate tegevuste käivitamine mingil etteplaneeritud<br />
ajahetkel. Tegevuseks võib olla näiteks üks andmetöötlusoperatsioon või<br />
ka selliste operatsioonide kogum. Andmebaasi administraator peab saama<br />
määrata milliseid tegevusi käivitada ning millal seda teha. Süsteem võib<br />
võimaldada käivitada tegevust perioodiliselt (mingi ajavahemiku tagant).<br />
- Administraatori automaatne teavitamine andmebaasis tekkinud<br />
veaolukordadest ja probleemidest – nt. e-maili saatmine.<br />
- Andmete eksportimine selleks, et kanda andmeid üle teistesse<br />
andmebaasidesse. Andmeid võidakse eksportida erinevas formaadis<br />
failidesse.<br />
• Comma Separated Values (CSV) formaadis fail. CSV on porditav<br />
failivorming, kus andmebaasikirjete väljad on üksteisest eraldatud<br />
komadega (Vallaste, 2007).<br />
• Fail, mis sisaldab andmete andmebaasi lisamiseks mõeldud<br />
andmekäitluskeele lauseid.<br />
• XML dokument.<br />
- Andmete importimine. Andmeid võib importida eelnimetatud failidest aga<br />
ka pöördumise teel teise andmebaasisüsteemi poole. Näiteks võib<br />
andmebaasisüsteem pakkuda võimaluse linkida andmebaasi teises<br />
andmebaasisüsteemis loodud andmebaasi tabelid ja pöörduda lingitud<br />
tabelite poole kasutades SQL keelt.<br />
- Andmebaasi tehtud toimingute ja andmebaasi töökiiruse andmete<br />
logimine.<br />
- "Prügikoristus" ja reorganiseerimine. Kustutatud tabeli ridade tegelik<br />
eemaldamine, salvestusruumi ümberkorraldamine. Siia alla kuulub ka<br />
indeksite ümberorganiseerimine peale tabelis olevate andmete muutumist.<br />
9
TTÜ: Andmebaasisüsteemid (2012) © Erki Eessaar<br />
4. Andmebaasisüsteemi komponendid<br />
Andmebaasisüsteem koosneb mitmest tarkvara komponendist (või<br />
moodulist), millest igaühel on oma ülesanne. Andmebaasisüsteemi loomisel<br />
tuleb võtta arvesse liidest andmebaasisüsteemi ja operatsioonisüsteemi<br />
vahel, sest ta kasutab operatsioonisüsteemi teenuseid. Järgnevalt esitatakse<br />
erinevate allikate põhjal näiteid andmebaasisüsteemide komponentidest.<br />
Joonis 2Andmebaasisüsteemi komponendid (Garcia-Molina et al., 2000).<br />
DML lausete kompilaator koostab SQL DML (andmekäitluskeele) lause<br />
füüsilise täitmisplaani. Füüsilise täitmisplaani koostamisel peab DML lausete<br />
kompilaator lugema süsteemikataloogist andmeid andmebaasiobjektide kohta<br />
(metaandmed) ja andmebaasis olevate andmete statistikat.<br />
10
TTÜ: Andmebaasisüsteemid (2012) © Erki Eessaar<br />
DML lausete kompilaator annab koostatud füüsilise täitmisplaani täitmiseks<br />
edasi lausete käivitamise moodulile. Andmete lugemine ja muutmine<br />
muutmälus on palju kiirem kui lugemine ja muutmine kõvakettal. Seetõttu<br />
hoitakse andmebaasisüsteemi töö ajal osa andmeid ka muutmälus.<br />
Kõigepealt otsitakse lause täitmiseks vajalikke andmeid muutmälust<br />
(mälupuhvrist). Kui seal neid ei ole, siis loetakse need kõvakettalt mällu.<br />
Muutmälu pole enamasti nii suur, et sinna kogu andmebaas ära mahuks.<br />
Seega peab andmebaasisüsteem korraldama andmete lugemist muutmällu,<br />
muutmälus muudetud andmete kirjutamist kõvakettale ja muutmälus uutele<br />
andmetele ruumi tegemist. Lausete käivitamise moodul annab indeksite,<br />
failide ja ridade haldurile korralduse leida lause täitmiseks vajalikud read.<br />
Kõvakettal on andmed failides. Failid sisaldavad plokke, mis omakorda<br />
sisaldavad mitut tabeli rida. Andmete mällu lugemine ja salvestamine toimub<br />
plokkide kaupa. Indeksite, failide ja ridade haldur pöördub puhvrite<br />
halduri poole, et see toimetaks vajalikke ridu sisaldavad plokid<br />
mälupuhvrisse. Puhvrite haldur pöördub püsisalvestuse halduri poole, et<br />
see loeks kõvakettalt olevatest failidest plokke ja kirjutaks need mällu või<br />
kirjutaks mälus muudetud plokke kõvakettale tagasi.<br />
Lause täitmisel pöördub lausete käivitamise moodul andmete samaaegse<br />
kasutamise võimaldamise mooduli poole, mis viib läbi andmeelementide<br />
lukustamist. Lukustatavaks andmeelemendiks võib näiteks olla tabeli rida.<br />
Andmed lukkude kohta võivad olla eraldi lukkude tabelis, kuid parem oleks<br />
hoida andmeid lukkude kohta koos lukustatavate andmetega (näiteks<br />
andmeplokkide päistes). Muudetava rea lukustamist on vaja, et andmebaasi<br />
ei satuks ebakorrektsed andmed. Näiteks kujutame ette lennureiside<br />
broneerimise süsteemi, kus üle maailma saab broneerida istekohti<br />
lennureisidele. Ei tohi juhtuda olukorda, et mitu kasutajat üritavad üheaegselt<br />
reserveerida sama reisi sama istekohta ja mõlemal see õnnestub. Ühel reisil<br />
saab ühel istekohal istuda ikkagi ainult üks inimene.<br />
Paralleelselt lausete täitmisega juhib transaktsioonide haldur<br />
transaktsioonide läbiviimist. Transaktsioonis võib sisalduda üks või mitu<br />
lauset. Logimise ja taastamise haldur tegeleb kõigi andmemuudatuste<br />
logimisega. Genereeritud logi salvestatakse regulaarselt kõvakettal<br />
asuvatesse failidesse. Selle logi alusel toimub veaolukorrast taastumise järel<br />
andmebaasi viimine korrektsesse seisundisse (pooleli jäänud<br />
transaktsioonide tehtud muudatused rullitakse tagasi; kinnitatud<br />
transaktsioonide tehtud muudatused tehakse uuesti, et tagada nende<br />
muudatuste püsiv salvestamine).<br />
<strong>11</strong>
TTÜ: Andmebaasisüsteemid (2012) © Erki Eessaar<br />
4.1 Süsteemikataloog<br />
Andmebaasi süsteemikataloog sisaldab andmebaasis olevate andmete<br />
kirjeldust e. metaandmeid. See on nagu andmebaas andmebaasi kohta.<br />
Mõnikord nimetatakse süsteemikataloogi ka andmesõnastikuks.<br />
Süsteemikataloogi struktuur ei ole standardiseeritud ja seetõttu on see<br />
erinevates andmebaasisüsteemides erinev.<br />
Järgnevalt on toodud näiteid andmete kohta, milliseid andmeid võiks<br />
sisaldada SQL-andmebaasi süsteemikataloog.<br />
• Andmebaasiobjektide (tabelid, vaated, indeksid jne.) omadused,<br />
sealhulgas nimed.<br />
• Tabeli veergude andmetüübid ja väljapikkused.<br />
• Tabelitele ja veergudele rakendatud täiendavad kitsendused.<br />
• Andmebaasi kasutajate kasutajanimed ja salasõnad.<br />
• Andmebaasi kasutajate grupid.<br />
• Andmebaasi kasutajatele ja kasutajate gruppidele andmebaasis antud<br />
õigused. On määratud, milliste andmebaasiobjektidega tohib kasutaja<br />
midagi teha.<br />
• Andmebaasi statistika – andmed selle kohta, kui palju on mingid<br />
andmebaasi tabelis ridu, kui palju on igas veerus erinevaid väärtuseid,<br />
milline on mingis veerus olevate väärtuste jaotus jne. Andmebaasisüsteem<br />
kasutab statistikat parima SQL lause täitmisplaani valimiseks. Statistikat ei<br />
täiendata automaatselt (see aeglustaks andmebaasi kasutamist), vaid<br />
selleks peab administraatori õigustega isik eraldi korralduse andma.<br />
Süsteemikataloogis olevad andmed on organiseeritud samade põhimõtete<br />
järgi mis "tavalises" andmebaasis. See tähendab, et SQLandmebaasisüsteemi<br />
süsteemikataloog koosneb tabelitest. Selliseid tabeleid<br />
nimetatakse süsteemseteks tabeliteks.<br />
Süsteemikataloogi kasutab eelkõige andmebaasisüsteemi programm.<br />
Süsteemikataloog luuakse andmebaasisüsteemi poolt automaatselt<br />
andmebaasi loomisel. Süsteemikataloogis olevate andmete uuendamine<br />
toimub automaatselt, juhul kui mõni andmebaasi kasutaja muudab<br />
andmebaasi struktuuri või annab/muudab/kustutab kasutajate õiguseid.<br />
Süsteemikataloogi struktuuri teades ning vastavaid õiguseid omades on<br />
võimalik nendes asuvat infot lugeda tavaliste päringu lausete abil.<br />
Süsteemikataloogist andmete lugemise õigus on administraatori õigustega<br />
kasutajatel. Nemad saavad ka seda õigust teistele kasutajatele edasi anda.<br />
Administraatoritel võib olla mõnes andmebaasisüsteemis ka õigus<br />
süsteemikataloogis andmeid muuta. Seda õigust ei tuleks üldjuhul kasutada,<br />
sest see võib suure tõenäosusega viia andmebaasi riknemiseni.<br />
12
TTÜ: Andmebaasisüsteemid (2012) © Erki Eessaar<br />
Süsteemikataloogis tehtava päringu näide andmebaasisüsteemis MS Access.<br />
Päringuga leitakse lokaalsete tabelite nimed:<br />
SELECT MSysObjects.Name as NIMI, 'Lokaalne tabel' AS LIIK<br />
FROM MSysObjects<br />
WHERE (MSysObjects.Type=1 AND MSysObjects.Flags=0);<br />
Selleks, et näha süsteemseid tabeleid MS Accessis (2003), tuleb valida<br />
“Tools=>Options=>View” ja teha linnuke valiku “System objects” ette.<br />
Süsteemikataloogis tehtava päringu näide andmebaasisüsteemis Oracle.<br />
Leia andmed päringu esitajale vastavasse skeemi kuuluvate tabelite kohta:<br />
SELECT *<br />
FROM user_tables;<br />
Leia tabelid, milles ei ole primaarvõtit ning mis kuuluvad päringu käivitaja<br />
skeemi:<br />
SELECT table_name<br />
FROM (SELECT table_name<br />
FROM User_tables<br />
MINUS<br />
SELECT table_name<br />
FROM user_constraints<br />
WHERE constraint_type = 'P')<br />
ORDER BY table_name;<br />
Süsteemikataloogis olevate andmete ettevaatamatu muutmine võib viia kogu<br />
andmebaasi riknemisele.<br />
Probleem on, et süsteemikataloogi struktuur pole standardiseeritud ja kipub<br />
ka sama andmebaasisüsteemi erinevates versioonides muutuma.<br />
SQL standard on selle probleemi lahendanud niimoodi, et näeb ette<br />
standardsete vaadete loomist süsteemikataloogi põhjal. Süsteemikataloogi<br />
kuuluvate baastabelite struktuur on andmebaasisüsteemi-spetsiifiline, aga<br />
andmebaasisüsteemi tootja peab pakkuma standardiseerituid vaateid<br />
süsteemikataloogi põhjal. SQL standardi järgi peavad kõik sellised vaated<br />
kuuluma skeemi nimega INFORMATION_SCHEMA. Standardi kirjelduses on<br />
need vaated konstrueeritud hüpoteetiliste baastabelite põhjal, mis kuuluvad<br />
skeemi DEFINITION_SCHEMA. SQL standard kirjeldab nende baastabelite<br />
struktuuri, kuid ei ütle, et süsteemikataloogi baastabelid peavad tingimata<br />
olema just sellise struktuuriga. DEFINITION_SCHEMA baastabeleid läheb<br />
standardi kirjelduses vaja selleks, et oleks võimalik kirjeldada<br />
INFORMATION_SCHEMAsse kuuluvaid vaateid.<br />
13
TTÜ: Andmebaasisüsteemid (2012) © Erki Eessaar<br />
Näide:<br />
SELECT *<br />
FROM information_schema.tables;<br />
Päringu tulemuseks andmed antud andmebaasis olevate tabelite kohta.<br />
Päringu tulemuses on näiteks:<br />
− andmebaasi (kataloogi) nimi;<br />
− skeemi nimi, kus tabel asub;<br />
− tabeli nimi;<br />
− tabeli tüüp (baastabel või vaade);<br />
− ...<br />
Vaate tables loomise lause andmebaasisüsteemis PostgreSQL:<br />
CREATE OR REPLACE VIEW information_schema.tables AS<br />
SELECT current_database()::information_schema.sql_identifier AS<br />
table_catalog, nc.nspname::information_schema.sql_identifier AS<br />
table_schema, c.relname::information_schema.sql_identifier AS table_name,<br />
CASE<br />
WHEN nc.nspname ~~ like_escape('pg!_temp!_%'::text, '!'::text)<br />
THEN 'LOCAL TEMPORARY'::text<br />
WHEN c.relkind = 'r'::"char" THEN 'BASE TABLE'::text<br />
WHEN c.relkind = 'v'::"char" THEN 'VIEW'::text<br />
ELSE NULL::text<br />
END::information_schema.character_data AS table_type,<br />
NULL::information_schema.sql_identifier::information_schema.sql_identifier<br />
AS self_referencing_column_name,<br />
NULL::information_schema.character_data::information_schema.character_d<br />
ata AS reference_generation,<br />
NULL::information_schema.sql_identifier::information_schema.sql_identifier<br />
AS user_defined_type_catalog,<br />
NULL::information_schema.sql_identifier::information_schema.sql_identifier<br />
AS user_defined_type_schema,<br />
NULL::information_schema.sql_identifier::information_schema.sql_identifier<br />
AS user_defined_name<br />
FROM pg_namespace nc, pg_class c, pg_user u<br />
WHERE c.relnamespace = nc.oid AND u.usesysid = c.relowner AND<br />
(c.relkind = 'r'::"char" OR c.relkind = 'v'::"char") AND (u.usename =<br />
"current_user"() OR has_table_privilege(c.oid, 'SELECT'::text) OR<br />
has_table_privilege(c.oid, 'INSERT'::text) OR has_table_privilege(c.oid,<br />
'UPDATE'::text) OR has_table_privilege(c.oid, 'DELETE'::text) OR<br />
has_table_privilege(c.oid, 'RULE'::text) OR has_table_privilege(c.oid,<br />
'REFERENCES'::text) OR has_table_privilege(c.oid, 'TRIGGER'::text));<br />
Nagu näete on vaade loodud selliste tabelite nagu pg_namespace, pg_class<br />
ja pg_user põhjal. Need tabelid kuuluvad PostgreSQL süsteemikataloogi.<br />
Ka relatsiooniline mudel näeb ette, et iga relatsiooniline andmebaas<br />
peab sisaldama relvare, mis moodustavad andmebaasi kataloogi.<br />
14
TTÜ: Andmebaasisüsteemid (2012) © Erki Eessaar<br />
Näiteks järgnev päring leiab PostgreSQL INFORMATION_SCHEMA põhjal<br />
andmed tabelite kohta, millel ei ole ei primaarvõtme kitsendust ega<br />
unikaalsuse kitsendust (Voronova, 2009).<br />
SELECT A.table_catalog as "Database Name", A.table_schema as<br />
"Schema", B.schema_owner as "Schema Owner", A.table_name as "Table"<br />
FROM information_schema.tables A<br />
LEFT JOIN information_schema.schemata B<br />
ON A.table_schema=B.schema_name<br />
WHERE A.table_name NOT IN<br />
(SELECT table_name FROM information_schema.table_constraints<br />
WHERE constraint_type IN ('PRIMARY KEY', 'UNIQUE'))<br />
AND (A.table_schema = 'public'<br />
OR B.schema_owner'postgres');<br />
4.2 Information Resource Dictionary System (IRDS)<br />
Andmesõnastik võib olla ka eraldi tarkvarasüsteem, mille ülesandeks on hoida<br />
informatsiooni kõigi organisatsiooni käsutuses olevate andmebaaside<br />
struktuuri kohta.<br />
IRDS on tarkvarasüsteem, mis suudab koondada ja selleks volitatud<br />
kasutajatele ühiseks kasutamiseks välja pakkuda andmeid, mis on pärit<br />
paljude erinevate vahendite süsteemsetest kataloogidest. Millised on<br />
võimalikud vahendid?<br />
- andmebaas; <strong>Andmebaasid</strong> võivad põhineda erinevat tüüpi<br />
andmemudelitel.<br />
- CASE vahend;<br />
- projektijuhtimise vahend;<br />
- dokumendihalduse vahend;<br />
- ...<br />
Mõnikord nimetatakse sellist süsteemi ka metaandmete andmebaasiks (ingl.<br />
k. metadata repository).<br />
See vahend annab ülevaate kõigist organisatsiooni käsutuses olevatest<br />
informatsiooni-ressurssidest. Vahend võimaldab andmevahetust erinevate<br />
süsteemsete kataloogide vahel. Näiteks võimaldab see kanda üle<br />
andmebaasi skeemi ühest andmebaasist teise.<br />
IRDS koosneb:<br />
- süsteemikataloog;<br />
- teenuste kiht (äriloogika);<br />
- teenuste kasutajaliides:<br />
- graafiline kasutajaliides;<br />
- käsurida;<br />
- ekspordi/impordi liides mis loob faili, mida saab vahetada teiste<br />
IRDSiga ühilduvate süsteemidega.<br />
- liides rakendusprogrammidega suhtlemiseks.<br />
15
TTÜ: Andmebaasisüsteemid (2012) © Erki Eessaar<br />
Näiteks võiks selline vahend võimaldada vastata küsimustele.<br />
• Millistes andmebaasides hoitakse andmeid klientide kohta?<br />
• Milliseid programme tuleb muuta kui kustutan andmebaasi Tööarvestus<br />
tabelist Töötaja veeru nimega palk?<br />
16
TTÜ: Andmebaasisüsteemid (2012) © Erki Eessaar<br />
4.3 SQL lause töötlemine<br />
Lause parsimine<br />
[Lause vigase süntaksiga ]<br />
Analüüsi puu<br />
Lause<br />
täitmiseks<br />
ettevalmis<br />
tamine<br />
Semantiline analüüs<br />
Täpsustatud analüüsi puu<br />
Loogilise täitmisplaani koostamine<br />
[Viited objektidele mida pole olemas või<br />
kasutajal pole täitmise õigust ]<br />
Loogiline täitmisplaan<br />
Füüsilise täitmisplaani koostamine<br />
Lause<br />
optimeeri<br />
mine<br />
Füüsiline täitmisplaan<br />
Lause täitmine<br />
Joonis 3SQL lause täitmise põhisammud (Molina et al., 2000).<br />
Järgnevaid tegevusi on kirjeldatud selles järjekorras nagu<br />
andmebaasisüsteem neid lause täitmisel läbi viib. Kirjeldus viitab küll SQLile,<br />
kuid samade põhimõtete kohaselt peaks lause töötlemine toimuma ka teiste<br />
andmebaasikeelte korral.<br />
Mälu eraldamine – mälus eraldatakse piirkond SQL lause ja seotud andmete<br />
hoidmiseks. Seal võidakse näiteks hoida parsimata (sõelumata) ja parsitud<br />
(sõelutud) SQL lauset ja SQL lause täitmisplaani.<br />
17
TTÜ: Andmebaasisüsteemid (2012) © Erki Eessaar<br />
Sõelumine (parsimine) – Toimub SQL lause süntaksi kontroll. Kontrollitakse<br />
võtmesõnade ja operaatorite korrektset kasutust SQL lauses, klauslite õiget<br />
järjestust jne. SQL lause esitatakse puustruktuurina, et see oleks<br />
arusaadavam arvutisüsteemile. Kui SQL lause on vale süntaksiga, siis lause<br />
töötlemine katkeb.<br />
Semantiline analüüs – Kontrollitakse, kas kõik SQL lauses viidatud<br />
andmebaasiobjektid (st. tabelid, vaated ja nende veerud) on<br />
süsteemikataloogis. Kontrollitakse, kas kasutajal on õigus neid objekte<br />
kasutada. Kui SQL lauses viidatakse objektile, mida pole olemas või kui<br />
kasutajal pole lause täitmiseks õiguseid, siis lause töötlemine katkeb.<br />
Loogilise täitmisplaani koostamine – Koostatakse loogiline täitmisplaan.<br />
Loogiline täitmisplaan esitatakse puustruktuurina (relatsioonialgebra puu) ja<br />
koostatakse järgmiste põhimõtete alusel.<br />
• Iga päringus välja toodud alusrelatsioon on puu leheks.<br />
• Puu juureks on päringu tulemus.<br />
• Juure ja lehtede vahele jäävad tipud esitavad vahetulemusteks olevaid<br />
relatsioone, mis on saadud mingi relatsioonialgebra operatsiooni tulemusel.<br />
• Päringu tulemuse saamiseks tehtavad operatsioonid tehakse järjekorras,<br />
mis algab puu lehtedest ja liigub juure poole.<br />
Loogilise täitmisplaani koostamise käigus üritatakse lause täitmise plaani<br />
optimeerida. Selleks muudetakse puus olevate relatsioonialgebra<br />
operatsioonide järjekorda, et lause annaks sama tulemuse, kuid üldine lause<br />
täitmise aeg oleks võimalikult lühike. Põhiidee seisneb selles, et projektsiooni<br />
ja piirangu operatsioonid tehakse võimalikult varakult ja alles seejärel<br />
hakatakse tegema ühendamise operatsioone.<br />
Füüsilise täitmisplaani koostamine – Loogilise täitmisplaani põhjal<br />
koostatakse füüsiline täitmisplaan. Toimuvad järgmised tegevused.<br />
• Relatsioonialgebra puus sisalduvate operatsioonide täitmiseks<br />
kasutatavate sisemise taseme protseduuride valimine.<br />
• Täitmisplaanide e. käivitusplaanide genereerimine ja parima<br />
(optimaalseima, madalaima maksumusega) valik võimalike lahenduste<br />
(täitmisplaanide) hulgast, etteantud kitsenduste (otsimiseks kulutatav aeg,<br />
arvutusvõimus, andmebaasi disain, andmemahud ja andmete jaotus jne.)<br />
juures. Iga genereeritud plaan kasutab madala taseme protseduure.<br />
Selle etapi käigus peab andmebaasisüsteem näiteks otsustama kas ja<br />
milliseid indekseid kasutada või millist meetodit kasutada ühendamise<br />
operatsioonide realiseerimiseks (nested loop join, merge join, hash join).<br />
Lause täitmine – Lause täidetakse koostatud füüsilise täitmisplaani põhjal.<br />
Lause täitmiseks täidetakse ettenähtud järjekorras füüsilises täitmisplaanis<br />
kirjeldatud operatsioonid.<br />
18
TTÜ: Andmebaasisüsteemid (2012) © Erki Eessaar<br />
Näide:<br />
SQL lause:<br />
SELECT A.aine_kood, Ais.nimetus<br />
FROM Aine A INNER JOIN Aine_seisund Ais ON<br />
A.aine_seisund_id=As.aine_seisund_id<br />
WHERE A.aine_kood='IDU3381' AND Ais.nimetus='kinnitatud';<br />
Analüüsi puu<br />
Joonis 4Analüüsi puu näide<br />
19
TTÜ: Andmebaasisüsteemid (2012) © Erki Eessaar<br />
Loogiline täitmisplaan<br />
Joonis 5Loogilise täitmisplaani näide<br />
Füüsiline täitmisplaan (kõrgtaseme kirjeldus)<br />
Moodusta mälus vahetabel T1:<br />
Loe tabelist Aine rida, kus aine_kood='IDU3381'<br />
Rea leidmiseks loe unique index scan meetodil indeksit idx_aine_kood<br />
Moodusta mälus vahetabel T2:<br />
Loe kõik read tabelist Aine_seisund.<br />
Filtreeri välja read, kus nimetus='kinnitatud'<br />
for (each row in T1) {<br />
for (each row in T2) {<br />
/*Väline tsükkel*/<br />
/*Sisemine tsükkel*/<br />
if (T1.aine_seisund_id=T2.aine_seisund_id) then<br />
output T1.aine_kood, T1.matrikli_<strong>nr</strong><br />
end if;<br />
}<br />
} /*Antud juhul kasutatakse ühendamise läbiviimiseks "nested loop join"<br />
algoritmi*/<br />
Ühte ja sama SQL lauset võidakse mingi ajaperioodi jooksul andmebaasis<br />
käivitada mitu korda. Selleks, et vältida üleliigset SQL lausete töötlemist, on<br />
näiteks andmebaasisüsteemis Oracle välja töötatud mehhanism, et hiljuti<br />
täidetud SQL lauseid ja nende täitmisplaane hoitakse spetsiaalses muutmälu<br />
(RAM) piirkonnas (ingl. k. shared pool). Kui saabub palve käivitada SQL<br />
lause, siis kontrollitakse kõigepealt mälust, kas sellise SQL lause täitmisplaan<br />
on olemas. Kui jah, siis leitud plaani alusel täidetakse SQL lause ja suur osa<br />
SQL lause töötlemisest jääb ära. SQL lause otsimiseks mälust kasutatakse<br />
räsifunktsiooni – see tähendab, et SQL lause teisendatakse arvuks ja arvu<br />
alusel otsitakse lauset mälust. Selleks, et vastavus leitaks, peaksid SQL<br />
laused olema identsed (st. kasutama ühtemoodi ka suuri ja väikseid tähti).<br />
20
TTÜ: Andmebaasisüsteemid (2012) © Erki Eessaar<br />
Paljudes andmebaasisüsteemides saab koostatud füüsilist täitmisplaani<br />
vaadata. Näiteks PostgreSQLis tuleb selleks kasutada EXPLAIN käsku.<br />
Kui mingi programm kasutab andmebaasi, siis võib tal olla vaja käivitada mitu<br />
korda ühte ja sama SQL lauset, kus on muutunud ainult literaalid. Näiteks:<br />
SELECT * FROM Isik WHERE isik_id=1;<br />
...<br />
SELECT * FROM Isik WHERE isik_id=2;<br />
...<br />
SELECT * FROM Isik WHERE isik_id=3;<br />
Vältimaks iga kord taolise SQL lause uuesti töötlemist, tuleb kasutada "bind<br />
variables".<br />
Näiteks Oracle andmebaasisüsteemis.<br />
VARIABLE isik_id_parameeter NUMBER<br />
BEGIN<br />
: isik_id_parameeter:=1<br />
END;<br />
SELECT * FROM Isik WHERE isik_id=:isik_id_parameeter;<br />
Kui taolise parameetri väärtus muutub, siis SQL lause uuesti täitmisel ei toimu<br />
uut SQL lause töötlemist. Kui mingi teise sessiooni käigus kasutatakse sama<br />
SQL lauset, siis leitakse andmebaasisüsteemi poolt arvuti mälust selle jaoks<br />
täitmisplaan.<br />
Kui parameetrite väärtused SQL lausesse sisse kodeerida ja vajadusel SQL<br />
lause uuesti genereerida, siis iga taolise SQL lause täitmisel toimub SQL<br />
lause täielik töötlemine andmebaasisüsteemi poolt.<br />
21
TTÜ: Andmebaasisüsteemid (2012) © Erki Eessaar<br />
5. SQL keskkond<br />
Järgnevalt vaatleme, mida ütleb andmebaasisüsteemide kohta SQL standard.<br />
SQL standardi kohaselt (Gulutzan & Pelzer 1999) täidetakse kõiki SQL<br />
operatsioone SQL keskkonnas, mis koosneb järgmistest osadest:<br />
1. SQL agent, mis põhjustab SQL lausete käivitamise. Tegu on enamasti<br />
rakendusprogrammiga.<br />
2. SQL-realisatsioon, see tähendab andmebaasisüsteem, mis käivitab SQL<br />
laused. Andmebaasisüsteem koosneb kõrgtasemel kahest komponendist:<br />
a) Üks SQL klient, millega on seotud SQL agent.<br />
b) Üks või mitu SQL serverit, mis hoiab andmeid (kõikide<br />
andmebaasiobjektide kirjeldusi e. metaandmeid ja tegelikke<br />
andmeväärtusi).<br />
SQL kliendi ülesanne on luua ja hoida ühendusi SQL agendiga ning<br />
vahendada SQL agenti ja SQL serverit.<br />
SQL serveri ülesanded on hallata SQL kliendiga toimuva suhtlemise sessiooni<br />
ning käivitada SQL lauseid.<br />
SQL kliendi ja serveri vahelise suhtlemise realiseerimise osas on jäetud<br />
andmebaasisüsteemi loojatele vabad käed. SQL agendi ja kliendi vaheline<br />
suhtlus on standardiseeritud. On kirjeldatud programmiliides (API, Application<br />
Programming Interface), mille kaudu peab olema võimalik<br />
andmebaasisüsteemi poole pöörduda.<br />
3. Null või rohkem SQL kliendi moodulit, mis sisaldavad protseduure ja on<br />
seotud SQL agendiga.<br />
4. Null või rohkem kasutajat.<br />
5. Null või rohkem kataloogi (vt. teema 5)<br />
6. Null või rohkem baastabelit, kus hoitakse andmeid (vt. teema 5).<br />
22
TTÜ: Andmebaasisüsteemid (2012) © Erki Eessaar<br />
Joonis 6SQL keskkond<br />
23
TTÜ: Andmebaasisüsteemid (2012) © Erki Eessaar<br />
6. Andmebaasisüsteemide liigitus<br />
Andmebaasisüsteemid võib empiiriliselt jagada:<br />
• lokaalsed töölaua andmebaasisüsteemid,<br />
• suuremad serveri andmebaasisüsteemid,<br />
• vahepealsed üleminekusüsteemid,<br />
• manusandmebaasisüsteemid.<br />
Jaotuse aluseks on.<br />
• Töödeldavate andmehulkade suurus.<br />
• Andmebaasi projekteerimise(ülesehitamise) võimaluste hulk.<br />
• Andmetöötluse paralleelsus (kas on andmete paralleeltöötlust või mitte).<br />
• Mitmeplatvormilisus.<br />
• Andmete haldamise vahendid (SQL standard, ainult osa sellest, ...)<br />
• ...<br />
Jaotuse aluseks pole.<br />
• Hind.<br />
• Tootja turupositsioon.<br />
6.1 Töölaua (desktop) andmebaasisüsteemid<br />
• Andmebaasisüsteemi on reeglina integreeritud ka rakenduste loomise<br />
vahendid, aruannete genereerimise vahendid.<br />
• Käsitletavad andmehulgad (mille puhul süsteemi toimimiskiirus on veel<br />
rahuldav) on suhteliselt väikesed (megabaidid – gigabaidid).<br />
• Puudub või on nõrgalt organiseeritud andmete samaaegse kasutamise<br />
võimalus mitme erineva kasutaja poolt. Sellega seoses töötavad sellised<br />
süsteemid võrguversioonidena (kui andmebaasil on läbi võrgu mitu<br />
kasutajat) suhteliselt aeglaselt ja ebakindlalt, eriti kui on tegemist<br />
suuremate andmehulkadega. Sobivus hajussüsteemidesse jätab soovida.<br />
• Tavaliselt on sellised süsteemid ühe või kaheplatvormilised (st.<br />
andmebaasisüsteem töötab kindlal operatsioonisüsteemil ja riistvaral).<br />
6.1.1 MS Access<br />
MS Access on SQL-andmebaasisüsteem, mis töötab MS Windows<br />
keskkonnas. MS Access pakub graafilist kasutajaliidest tabelite, SQL lausete,<br />
ekraanivormide ja trükiste koostamiseks. MS Access sisaldab vahendeid<br />
andmebaasi kasutava rakenduse loomiseks, kasutades makrokeelt ja<br />
Microsoft Visual Basic for Applications (VBA) keelt. MS Access pakub<br />
programme, mida nimetatakse Abimeesteks või Tarkadeks (ingl. k. Wizard),<br />
mis lihtsustavad paljusid andmebaasi ja rakenduse loomise protsesse. MS<br />
Access pakub ka programme, mida nimetataks Konstruktoriteks (ingl. k.<br />
24
TTÜ: Andmebaasisüsteemid (2012) © Erki Eessaar<br />
Builder), mis võimaldavad ehitada süntaktiliselt korrektseid lauseid (nt. SQL<br />
lauseid).<br />
MS Access (2007) võimaldab luua järgnevat tüüpi andmebaasiobjekte.<br />
- Tabel (baastabel).<br />
- Vaade.<br />
- Protseduur.<br />
- Indeks.<br />
- Kasutaja.<br />
- Kasutajate grupp.<br />
Lisaks on võimalik luua rakenduse ülesehitamiseks mõeldud objekte.<br />
- Ekraanivorm.<br />
- Trükis.<br />
- Veebilehekülg.<br />
- Makro.<br />
- Moodul.<br />
MS Access on mõeldud eeskätt personaalsete andmebaaside loomiseks, kuid<br />
seda võib panna tööle ka nii, et selle poole pöördub mitu kasutajat. Selleks<br />
võib Accessis loodud andmebaasi/rakenduse jagada kaheks (Näiteks<br />
MS Access 2003 tuleb selleks valida: Tools=>Database utilities=> Database<br />
splitter. MS Access 2007 tuleb valida riba Database Tools => Move Data =><br />
Access Database). Ühte faili jäävad andmebaasiobjektid (nt. tabelid). See fail<br />
paigutatakse jagatud kataloogi, kus selle poole saavad pöörduda erinevad<br />
kasutajad. Fail, mis sisaldab rakendust ja linke failiserveris asuva andmebaasi<br />
tabelitele, paigutatakse iga kasutaja tööarvutisse.<br />
MS Accessi andmebaasisüsteem koosneb kahest põhikomponendist.<br />
- Rakenduse loomise keskkond.<br />
- Andmebaasi mootor.<br />
MS Access andmebaasisüsteemis on vaikimisi kasutusel JET (Joint Engine<br />
Technology) andmebaasimootor.<br />
http://en.wikipedia.org/wiki/Microsoft_Jet_Database_Engine<br />
Alates MS Access 2007 on kasutusel Access Database Engine (tegelikult uus<br />
Jet mootori versioon), mis on ühilduv varasemate MS Accessi versioonide<br />
kasutatavate andmebaasimootoritega – see tähendab, et varasemates MS<br />
Accessi versioonides loodud *.mdb faile saab MS Access abil lugeda ja<br />
muuta. Tänu uuele andmebaasimootori versioonile on MS Access 2007-s<br />
kasutusel uus vaikimisi failiformaat (.accdb).<br />
Arendajad, kes soovivad luua MS SQL Serveriga ühilduvat andmebaasi,<br />
võivad võtta kasutusele MSDE (Microsoft Data Engine e. Microsoft SQL<br />
Server Desktop Engine) andmebaasimootori.<br />
http://en.wikipedia.org/wiki/Microsoft_Desktop_Engine<br />
Järgnevalt esitatakse nende andmebaasimootorite omaduste võrdlus<br />
MS Access 2000 korral.<br />
25
TTÜ: Andmebaasisüsteemid (2012) © Erki Eessaar<br />
Allikas: Microsoft Access 2000: Choosing between MSDE and Jet. White<br />
Paper, May 1999.<br />
Omadused Jet MSDE<br />
Erinevat tüüpi ühendamisoperaatorid X X<br />
Top n ja top n% päringud X X<br />
Valideerimisreeglid X X<br />
Vaikimisi väärtused X X<br />
Trigerid ja salvestatud protseduurid<br />
Viidete terviklikkus trigerite abil<br />
(protseduurne viidete terviklikkuse<br />
tagamine)<br />
Deklaratiivne viidete terviklikkuse<br />
tagamine<br />
Võimalus määrata suhte<br />
definitsioonis ON UPDATE<br />
CASCADE ja ON DELETE<br />
CASCADE omadus<br />
Lukustamise ühik Rida Rida<br />
Rea lukustamine andmete lisamisel X X<br />
Replikatsioon mingil kindlaks<br />
määratud momendil<br />
X<br />
X<br />
X<br />
X (nõuab<br />
Microsoft Office<br />
2000<br />
Developerit)<br />
Sisse-ehitatud julgeoleku meetmed X X<br />
Sisse ehitatud krüpteerimine X X<br />
Hajusad transaktsioonid<br />
X<br />
Dünaamiline varundamine ja<br />
X<br />
taastamine<br />
Transaktsioonide logi säilitamine<br />
X<br />
X<br />
X<br />
X<br />
Võimalik paralleelsete kasutajate arv Kokku kuni 20<br />
kasutajat<br />
Andmemahud<br />
2 GB<br />
andmebaasi<br />
kohta<br />
Kuni 5 paralleelset<br />
kasutajat.<br />
2 GB andmebaasi<br />
kohta.<br />
MSDE mootori kasutamine võimaldab luua klient-server süsteeme (vt. teema<br />
<strong>nr</strong>. 15), kus andmebaas asub spetsiaalses serverarvutis ning kliendi rakendus<br />
erinevate klientide arvutites. Korraga saab andmebaasi kasutada palju isikuid.<br />
26
TTÜ: Andmebaasisüsteemid (2012) © Erki Eessaar<br />
6.2 Serveri andmebaasisüsteemid<br />
Serveri andmebaasisüsteemide omadused.<br />
• Kasutatavate andmebaasiobjektide hulk on võrreldes töölaua<br />
andmebaasisüsteemidega suurem (tabelid, vaated, indeksid, arvujada<br />
generaatorid, trigerid jne.).<br />
• Töötavad tihti mitmetel platvormidel (nii riist- kui ka tarkvara mõttes).<br />
• Arenenud andmete paralleeltöötlus, mitmekasutaja režiim, töö võrkudes ja<br />
hajussüsteemides.<br />
• Võimaldab töötada suurte andmehulkadega (gigabaidid – terabaidid). See<br />
muidugi seab ka palju suuremad nõudmised tööarvutile võrreldes töölaua<br />
andmebaasisüsteemidega.<br />
• Rakenduste loomise vahendid tuleb eraldi muretseda. (nt. Oracle<br />
tooteperekonda kuuluvad vahendid Java rakenduste loomiseks. Samuti<br />
kuulub sinna vahend Oracle Application Express (APEX), mis on mõeldud<br />
kiireks veebirakenduste loomiseks. Oracle APEX abil loodud rakenduse<br />
kirjeldus salvestatakse Oracle andmebaasis.).<br />
VÕRGU JA<br />
LIIDESETARKVARA<br />
(n. ODBC, JDBC)<br />
ANDMEBAASI<br />
MOOTOR<br />
(database engine)<br />
KASUTAJALIIDESED (ja<br />
nende projekteerimise<br />
vahendid s.h.<br />
programmeerimiskeeled)<br />
ANDMEBAASI<br />
ADMINISTRAATORI<br />
LIIDES<br />
VALMISPRODUKTID<br />
(mis sobivad antud<br />
andmebaasisüsteemi<br />
andmebaaside<br />
kasutamiseks)<br />
Joonis 7Suurte infosüsteemide väljatöötamiseks vajalik tooterühm<br />
27
TTÜ: Andmebaasisüsteemid (2012) © Erki Eessaar<br />
6.2.1 Oracle Enterprise Edition<br />
Oracle pakub tervet suurt tooteperekonda, mille üheks osaks on andmebaasi<br />
server (Oracle Enterprise Edition) ja ka töölaua andmebaasisüsteem (Oracle<br />
Personal Edition).<br />
Kasutaja suhtleb Oraclega ja loob andmebaasi ja rakenduse kasutades<br />
erinevaid andmebaasiobjekte. Järgnevalt tuuakse nendest mõnede kohta<br />
näiteid.<br />
- Tabel. Oracle võimaldab luua eritüübilisi tabeleid, mille puhul on andmed<br />
sisemisel tasemel organiseeritud erineval viisil:<br />
• Hiip-organiseeritud tabel<br />
• Indeks-organiseeritud tabel<br />
• Kobarasse koondatud tabelid<br />
• Välised tabelid<br />
• XML tüüpi tabelid<br />
• Ajutised tabelid<br />
• Võimalik on tabelite sektsioonideks jagamine ja tabelis olevate andmete<br />
pakkimine.<br />
- Tüüp. Tüüp on nime omav lõplik väärtuste hulk. Oracles on võimalik luua<br />
uusi tüüpe.<br />
--Tüübi loomine<br />
CREATE OR REPLACE TYPE t990999_Address_Type AS OBJECT (<br />
street_addr VARCHAR2(25),<br />
city VARCHAR2(50),<br />
country VARCHAR2(50),<br />
postal_code NUMBER(5));<br />
/<br />
--Tabelisse veerg, mis on eelnevalt defineeritud tüüpi<br />
CREATE TABLE t990999_People<br />
(name VARCHAR2(10),<br />
home_address t990999_address_type,<br />
work_address t990999_address_type);<br />
--Andmete lisamine tabelisse<br />
DECLARE<br />
l_home_address t990999_Address_Type;<br />
l_work_address t990999_Address_Type;<br />
BEGIN<br />
l_home_address:=t990999_Address_Type('Ristiku tee 25',<br />
'Tallinn','Estonia',12897);<br />
l_work_address:=t990999_Address_Type('Ehitajate tee 1',<br />
'Tallinn','Estonia',23456);<br />
INSERT INTO t990999_People(name, home_address, work_address)<br />
VALUES ('Andres Mesitaru', l_home_address, l_work_address);<br />
END;<br />
/<br />
28
TTÜ: Andmebaasisüsteemid (2012) © Erki Eessaar<br />
--Päring tabeli põhjal<br />
SELECT * FROM t990999_People;<br />
--Küsitakse isiku nime ja kodu aadressist tänavat ja linna<br />
SELECT name, P.home_address.street_addr, P.home_address.city<br />
FROM t990999_People P;<br />
- Klaster e. kobar. Välisvõtme kaudu seotud tabelid salvestatakse sisemisel<br />
tasemel kui üks tabel (ühistesse tabeliplokkidesse). Kui tehakse päring,<br />
millega küsitakse andmeid nendest tabelitest, siis ei ole vaja sisemisel<br />
tasemel hakata andmeid ühendama ja seega on päring kiirem. Võimaldab<br />
hoiduda tabelite denormaliseerimisest. Denormaliseerimise käigus<br />
ühendatakse andmebaasi kontseptuaalsel tasemel mitu tabelit üheks<br />
tabeliks tuues ettekäändeks töökiiruse parandamise vajaduse.<br />
- Indeks. Kiirendab andmete otsimist andmebaasist. Indeks võib olla loodud<br />
ühele veerule või mitmele veerule (liitindeks). Samas pole indeks tasuta<br />
lõuna – indeksis on andmed ja seega kulutab see salvestusruumi; indeksit<br />
tuleb hoida kooskõlas indekseeritud andmetega ning seega aeglustab<br />
indeks andmete muutmist.<br />
- Vaade. Virtuaalne tabel, mis moodustatakse SELECT lause tulemusel ja<br />
pakub kasutajale vaadet andmebaasile.<br />
- Materialiseeritud vaade e. hetktõmmis.<br />
- Sünonüüm. Andmebaasiobjekti alternatiivne nimi.<br />
- Arvujada generaator. Objekt, mille poole pöördudes genereerib süsteem<br />
unikaalse täisarvu. Süsteem tagab, et see arv on unikaalne isegi siis, kui<br />
andmebaasi kasutab paralleelselt palju kasutajaid. Seda arvu saab<br />
kasutada võtme väärtusena.<br />
- Rutiinid.<br />
- Funktsioon. Hulk SQL ja PL/SQL (protseduurne<br />
programmeerimiskeel) lauseid, mis täidavad üheskoos mingit<br />
ülesannet. Funktsioon tagastab alati mingi väärtuse.<br />
- Salvestatud protseduur. Protseduur ei pruugi tagastada väärtust,<br />
ta võib tagastada ühe väärtuse või ka mitu väärtust.<br />
- Pakett. Ühe programmiühikuna salvestatud protseduuride, funktsioonide<br />
ja muutujate kogum.<br />
- Triger. Andmebaasis salvestatud programm, mis käivitub siis, kui<br />
andmebaasis toimub sündmus (nt. rea lisamine tabelisse, rea muutmine<br />
tabelis, rea kustutamine tabelist).<br />
6.3 Üleminekusüsteemid<br />
Andmebaasisüsteem, mis on mõeldud selleks, et meelitada kliente kasutama<br />
firma serveri andmebaasisüsteeme. Enamasti levitatakse seda tasuta. Sellise<br />
süsteemi sihtrühmad on.<br />
• Teiste firmade andmebaasisüsteemide kasutajad.<br />
• Sama firma töölauaandmebaasisüsteemide kasutajad.<br />
• Kasutajad, kes andmebaasisüsteemide abi veel ei tarvita (nt. Exceli<br />
kasutajad).<br />
29
TTÜ: Andmebaasisüsteemid (2012) © Erki Eessaar<br />
Süsteemi võimsus ja programmeerijale pakutavad võimalused jäävad töölaua<br />
ja serveri andmebaasisüsteemide vahele. Selliseid süsteeme iseloomustavad<br />
ka tehnilised piirangud, mis ei võimalda neid kasutada suuremahulistes<br />
süsteemides.<br />
Näide Oracle Express Edition 10g (XE) piirangutest.<br />
• Kuni 4GB kasutajate andmeid (Oracle <strong>11</strong>g puhul on piiranguks <strong>11</strong>GB<br />
kasutajate andmeid (Dontcheff, 20<strong>11</strong>)).<br />
• Serveris võib olla vaid üks andmebaasi eksemplar.<br />
• Kasutab ära ainult ühe serveri CPU võimsuse.<br />
• Kasutab ära maksimaalselt 1GB mälu.<br />
Selliste süsteemidega on integreeritud rakenduste loomise vahendid. Näiteks<br />
Oracle Express Edition (XE) süsteemiga tuleb kaasa veebirakenduste<br />
ehitamiseks mõeldud vahend Application Express (endine Oracle HTMLDB).<br />
Näited: Oracle Express Edition (Oracle XE), MS SQL Server Express (selle<br />
eellane oli Microsoft Data Engine e. Microsoft SQL Server Desktop Engine<br />
(MSDE)).<br />
6.4 Manusandmebaasisüsteemid<br />
Andmebaasisüsteem, mida kasutatakse mõne eraldiseisva rakenduse<br />
lahutamatu osana. Eeliseks on, et rakenduse tööle panemiseks ei ole vaja<br />
installeerida eraldi andmebaasisüsteemi. Andmebaasisüsteem tuleb juba<br />
rakendusega kaasa (on üks selle osa) ja on kasutaja eest varjatud. Selline<br />
andmebaasisüsteem peab olema äärmiselt töökindel, sest selle puhul ei<br />
kasutata andmebaasi administraatori teeneid. Samuti peaks ta kõvakettal<br />
võtma vähe ruumi.<br />
Näited: SQLite, BerkeleyDB, MS SQL Server Compact, H2, Empress.<br />
Näitels SQLite on SQL manusandmebaasisüsteem, mis vastab vastab suures<br />
osas SQL-92 standardile. Installatsiooni suurus on umbes 275 kB. Tarkavara<br />
lähtekood on avalik. Tarkvara on kirjutatud C keeles. SQLite abil loodud<br />
andmebaasi suurus võib olla kuni 275 TB.<br />
SQLite kasutava tarkvara näited: Firefox, Thunderbird, Skype, McAfee<br />
antivirus, Google Gears, Apple's Safari, Adobe Integrated Runtime.<br />
Näited programmeerimiskeeltest, milles saab SQLite poole pöörduda: Delphi,<br />
C, C++, C#, Java, Perl, PHP, Python, Ruby, Visulal Basic.<br />
Mozilla Firefox veebilehitseja kasutaja võib installeerida SQLite Manager lisa,<br />
mis pakub otsese juurdepääsu Mozilla Firefox ja Thunderbird poolt<br />
kasutatavates SQLite andmebaasides olevatele andmetele. Samuti võimaldab<br />
see lisa luua uusi SQLite andmebaase.<br />
Manusandmebaasisüsteemi kasutamisel on kasutaja andmed tema enda<br />
arvutis (või nutitelefonis), mitte kuskil kaugel serveris ja see võimaldab<br />
30
TTÜ: Andmebaasisüsteemid (2012) © Erki Eessaar<br />
andmeid kiiremini töödelda. Kui projekteerida firma infosüsteem nii, et osa<br />
klientide personaalseid andmeid hoitakse klientide arvutites (või<br />
nutitelefonides), siis see võimaldab serveritelt kokku hoida (Wiener, 2012).<br />
Selline tehniline lahendus on firma omanikele majanduslikult atraktiivne.<br />
7. Millal on andmebaasisüsteem relatsiooniline?<br />
E. F. Coddi reeglid selle kohta, millal on andmebaasisüsteem relatsiooniline<br />
(aastast 1985).<br />
Mõned märkused.<br />
Codd ei kasutanud mõistet relvar (relatsiooniline muutuja), vaid<br />
relatsioon. See tähendab, et ta kasutas terminit "relatsioon"<br />
tähistamaks nii muutujat, kui ka selle väärtust. Antud kursuses on<br />
nende mõistete tähistamiseks erinevad terminid.<br />
Erinevalt Kolmanda Manifesti autoritest leidis Codd, et relatsiooniline<br />
mudel võiks kasutada kolmevalentset loogikat (see tähendab, et<br />
toetada midagi sarnast NULLidele). Puuduvate väärtuste andmebaasis<br />
registreerimine (ja ka virtuaalsetele relvaridele väärtuste andmine) on<br />
küsimus, mis pole endiselt lõplikult selgeks vaieldud ja kus leidub<br />
mitmeid erinevaid nägemusi ja ettepanekuid.<br />
Alusreegel<br />
Reegel 0: Iga süsteem peab olema täielikult võimeline haldama andmebaase<br />
kasutades relatsioonilise andmemudeli võimalusi.<br />
Reegel 12: Möödahiilimise vältimise reegel<br />
Kui süsteemis on kasutusel korteežide ükshaaval töötlemiseks mõeldud<br />
protseduurne keel, ei tohi selles keeles tehtud muudatus minna vastuollu<br />
mitteprotseduurses relatsioonilises keeles kirjeldatud kitsendustega.<br />
Struktuuri reeglid<br />
Reegel 1: Informatsiooni esitamise reegel<br />
Kogu relatsioonilises andmebaasis olev informatsioon esitatakse kasutajatele<br />
relatsioonides olevate andmetena (kasutajale paistab relatsioon tabelina).<br />
Reegel 6: Läbi vaadete andmete muutmise reegel<br />
Süsteem peab võimaldama andmete muutmist läbi kõigi vaadete, mille puhul<br />
see on teoreetiliselt võimalik.<br />
Terviklikkuse reeglid<br />
Reegel 3: Väärtuse puudumise süstemaatiline käsitlemine<br />
31
TTÜ: Andmebaasisüsteemid (2012) © Erki Eessaar<br />
Süsteem peab toetama süstemaatiliselt ja andmetüübist sõltumata NULLide<br />
kasutamist puuduvate ja ebasobivate andmete esitamiseks.<br />
Reegel 10: Kitsenduste sõltumatuse reegel<br />
Süsteem peab võimaldama andmebaasiga töötamise keele abil defineerida<br />
kitsendusi andmebaasis olevatele andmetele. Need kitsendused<br />
salvestatakse süsteemikataloogis ja neid ei jõusta andmeid kasutavad<br />
programmid, vaid andmebaasisüsteem.<br />
Andmete manipuleerimise reeglid<br />
Reegel 2: Garanteeritud juurdepääsu reegel<br />
Iga relatsioonis asuv atomaarne andmeelement peab olema leitav kui on<br />
teada: relatsiooni nimi, atribuudi nimi (mille väärtus soovitakse leida),<br />
primaarvõtme poolt hõlmatud atribuutide nimed ning nende atribuutide<br />
väärtused.<br />
Reegel 4: Relatsioonilisel mudelil põhinev dünaamiline kataloog<br />
Loogilisel tasemel esitatakse andmebaasi kirjeldus samal viisil kui kõiki<br />
ülejäänud andmebaasis olevaid andmeid. Volitatud kasutajad saavad neid<br />
andmeid kasutada relatsioonilise keele abil. Seega andmetel ja metaandmetel<br />
(andmetel andmete kohta) on sama esitusviis ja töötlemise keel.<br />
Reegel 5: Laiahaardeline andmebaasiga töötamise keel<br />
Süsteem peab võimaldama kasutada vähemalt ühte keelt, mille lausendid<br />
võimaldavad relatsioonide defineerimist, andmete käitlemist, kitsenduste<br />
haldamist, juurdepääsuõiguste haldamist ja transaktsioonide haldamist.<br />
Reegel 7: Kõrgtaseme lisamise, muutmise ja kustutamise reegel<br />
Süsteem peab võimaldama lisada, muuta ja kustutada korraga tervet hulka<br />
korteeže.<br />
Andmete sõltumatuse reeglid<br />
Reegel 8: Füüsilise andmete sõltumatuse reegel<br />
Andmebaasi sisemisel tasemel tehtud muudatus ei tohi põhjustada<br />
andmebaasi kasutavate programmide muutmise vajadust.<br />
Reegel 9: Loogilise andmete sõltumatuse reegel<br />
Andmebaasi kontseptuaalsel tasemel tehtud muudatus, mille tulemusena ei<br />
lähe andmebaasist andmeid kaotsi, ei tohi põhjustada andmebaasi<br />
kasutavate programmide muutmise vajadust.<br />
Reegel <strong>11</strong>: Paiknemisest sõltumatuse reegel<br />
32
TTÜ: Andmebaasisüsteemid (2012) © Erki Eessaar<br />
Andmebaasi kasutajaid ei tohi mõjutada andmete paigutuse muutmine<br />
(näiteks andmebaasi hajutamine erinevatele serveritele või hajutatud andmete<br />
koondamine ühele serverile).<br />
8. SQL-andmebaasisüsteemid<br />
Järgnevalt on toodud mõned näited.<br />
Kaubamärgi nimetus<br />
Oracle<br />
IBM DB2<br />
MS SQL Server<br />
MS Access<br />
Teradata<br />
Informix<br />
Progress<br />
Ingres<br />
Sybase<br />
InterBase<br />
MySQL<br />
PostgreSQL<br />
Firebird<br />
Fyracle – Oracle mode<br />
Firebird<br />
SAP MaxDB<br />
EnterpriseDB – Postgres<br />
Plus Standard Server;<br />
Postgres Plus Advanced<br />
Server<br />
MimerSQL<br />
Mckoi SQL<br />
BerkleyDB<br />
Apache Derby<br />
Gupta SQLBase<br />
SQLite<br />
Kodulehekülg<br />
http://www.oracle.com/<br />
http://www-01.ibm.com/software/data/db2/<br />
http://www.microsoft.com/sql/<br />
http://www.microsoft.com/office/access/default.asp<br />
http://www.teradata.com/<br />
http://www-01.ibm.com/software/data/informix/<br />
http://www.progress.com/index.ssp<br />
http://www.ingres.com/<br />
http://www.sybase.com/products/databaseservers<br />
http://www.ibphoenix.com/<br />
http://www.mysql.com/<br />
http://www.postgresql.org/<br />
http://www.firebirdsql.org/<br />
http://www.janus-software.com/fb_fyracle.html<br />
https://www.sdn.sap.com/irj/sdn/maxdb<br />
http://www.enterprisedb.com/<br />
http://www.mimer.com/<br />
http://mckoi.com/database/<br />
http://www.oracle.com/technetwork/database/berkele<br />
ydb/overview/index.html<br />
http://db.apache.org/derby/index.html<br />
http://www.unify.com/Products/SQLBase/default.aspx<br />
http://www.sqlite.org/<br />
9. Andmebaasisüsteemi valiku kriteeriume<br />
1. Määrake kindlaks kriteeriumid, mille alusel soovite andmebaasisüsteeme<br />
hinnata. Järgnevalt on toodud näiteid võimalikest kriteeriumitest.<br />
Andmebaasiobjektide tüübid.<br />
- Süsteemi-defineeritud andmetüübid<br />
- Uute andmetüüpide loomise võimalus<br />
- Primaarvõtme deklareerimise võimalus<br />
- Täiendava unikaalsuse kitsenduse deklareerimise võimalus<br />
- Välisvõtme deklareerimise võimalus<br />
33
TTÜ: Andmebaasisüsteemid (2012) © Erki Eessaar<br />
- Välisvõtmega seotud kompenseerivate tegevuste deklareerimise võimalus<br />
- Tabeliga seotud CHECK kitsenduste loomise võimalus<br />
- Assertion objektide loomise võimalus (et oleks võimalik luua keerukamate<br />
ärireeglite kontrollimiseks mõeldud deklaratiivseid kitsendusi)<br />
- Vaadete kasutamise võimalus<br />
- Võimalus muuta baastabelites andmeid läbi vaadete<br />
- Võimalus lasta andmebaasisüsteemil genereerida unikaalseid<br />
võtmeväärtuseid<br />
- INFORMATION_SCHEMA olemasolu, mis pakub standardsed vaated<br />
süsteemikataloogi tabelitele<br />
- ...<br />
Ligipääsetavus.<br />
- Kasutatavad päringukeeled<br />
- Süsteemi-defineeritud funktsioonid<br />
- Kasutaja-defineeritud protseduuride/funktsioonide loomise võimalus<br />
- Turvalisuse tagamise vahendid<br />
- ...<br />
Füüsiline ülesehitus.<br />
- Andmete salvestamisel kasutatavate failide sisemine ülesehitus ja selle<br />
muutmise võimalus<br />
- Indeksite tüübid<br />
- Mälukasutus ja selle muutmise võimalus<br />
- Andmete pakkimise võimalus<br />
- ...<br />
Transaktsioonide haldamine.<br />
- Varukoopiate ja taastamise võimalus<br />
- Päringute paralleeltöötluse võimalus<br />
- Tupikute (ingl. k. Deadlock) lahendamise strateegiad<br />
- ...<br />
Lisavõimalused.<br />
- Andmebaasioperatsioonide töökiiruse mõõtmise võimalus<br />
- Andmete ekspordi/impordi võimaldamine<br />
- Kasutajate aktiivsuse jälgimise võimalused<br />
- Andmebaasi administreerimise võimalused<br />
- ...<br />
Arendusvahendid.<br />
- CASE vahendite toetus (kui palju leidub CASE vahendeid, mille abil saab<br />
andmebaasisüsteemis loodud andmebaase füüsiliselt disainida ning<br />
andmebaasi loomiseks mõeldud koodi genereerida)<br />
- Kas leidub rakenduste generaatoreid, mis suudavad andmebaasi<br />
süsteemikataloogist loetud info alusel genereerida andmebaasi<br />
kasutamiseks mõeldud rakenduse?<br />
- Millistest programmeerimiskeeltest saab andmebaasisüsteemi poole<br />
pöörduda?<br />
- ...<br />
34
TTÜ: Andmebaasisüsteemid (2012) © Erki Eessaar<br />
Muud omadused.<br />
- Hind<br />
- Lähtekoodi avalikkus<br />
- Dokumentatsiooni kvaliteet<br />
- Kasutajate ringi suurus<br />
- Koolituse ja kasutajatoe olemasolu<br />
- Veebipõhised abimaterjalid<br />
- Kindlus selle suhtes, et tootja ei lõpeta eksistentsi või<br />
andmebaasisüsteemi edasiarendamist<br />
- Vastavus standarditele<br />
- Andmeanalüüsi- ja otsustusvahendite toetus<br />
- Nõuded riistvarale<br />
- Nõuded operatsioonisüsteemile<br />
- Paralleelsete kasutajate arv<br />
- Töökiirus<br />
- XML tugi<br />
- Võrgutugi<br />
- Ühildumine teiste andmebaasisüsteemidega<br />
- ...<br />
2. Valige välja andmebaasisüsteemid, mis võivad olla valiku variandid.<br />
3. Hinnake andmebaasisüsteeme. Kasutage näiteks analüütiliste hierarhiate<br />
(Saaty) meetodit.<br />
Vaadake: Võhandu, L. Subjektiivsetest hinnangutest objektiivsete<br />
tulemusteni. Loengukonspekt. TTÜ Informaatikainstituut, 1998. 72 lk.<br />
http://www.tud.ttu.ee/material/enn/EBSEJS2009/AHM_vohandu_konspekt_1998.pdf<br />
(<strong>11</strong>.05.2012)<br />
Üldpõhimõte: Kasutatakse paarilisi võrdlusi.<br />
- Hinnatakse kriteeriumite olulisust.<br />
- Hinnatakse alternatiivide (antud juhul andmebaasisüsteemide) headust iga<br />
kriteeriumi suhtes.<br />
- Arvutatakse välja lõpphinnang.<br />
4. Esitage soovitus.<br />
Raidma (2006) esitab viie SQL-andmebaasisüsteemi võrdluse ja kasutab<br />
Saaty meetodit, et valida välja parim andmebaasisüsteem. Taolise võrdluse<br />
läbiviimiseks võib näiteks uurida raamatut (Gulutzan & Pelzer, 2003), kus<br />
võrreldakse kaheksat erinevat andmebaasisüsteemi.<br />
Saaty meetod on kasulik alati, kui on vaja teha otsuseid. Näiteks.<br />
- Valige välja parim infosüsteemi projekteerimisega tegelev firma.<br />
- Valige välja parim andmebaasi arendusmetoodika.<br />
- Valige välja parim CASE vahend.<br />
- Valige välja parim andmebaasisüsteem.<br />
- Valige välja parim lahendus, kuidas realiseerida projekteeritud<br />
infosüsteem.<br />
35
TTÜ: Andmebaasisüsteemid (2012) © Erki Eessaar<br />
10. Mõisted<br />
Eesti keeles<br />
Andmebaasisüsteem<br />
Andmebaasihaldur<br />
Manusandmebaasisüsteem<br />
Relatsiooniline<br />
andmebaasisüsteem<br />
Andmebaasi skeem<br />
Väline tase<br />
Väline skeem<br />
Kontseptuaalne tase<br />
Kontseptuaalne skeem<br />
Sisemine tase<br />
Sisemine skeem<br />
Päringu töötleja<br />
Failihaldur<br />
DML eeltöötleja<br />
DDL kompilaator<br />
Kataloogi haldur<br />
Süsteemikataloog<br />
Andmesõnastik<br />
Andmebaasi mootor<br />
Inglise keeles<br />
Database Management System<br />
DBMS<br />
Embedded DBMS<br />
Relational Database Management<br />
System<br />
Database schema<br />
External level<br />
External schema<br />
Conceptual level<br />
Conceptual schema<br />
Internal level<br />
Internal schema<br />
Query processor<br />
File manager<br />
DML preprocessor<br />
DDL compiler<br />
Catalog manager<br />
System catalog<br />
Data dictionary<br />
Database engine<br />
<strong>11</strong>. Kasutatud materjalid<br />
1. Best Practices When Using Microsoft Office Access 2003 in a Multi-user<br />
Environment [WWW]<br />
http://msdn2.microsoft.com/en-us/library/aa167840(office.<strong>11</strong>).aspx<br />
(06.05.2007)<br />
2. Connolly, T.M. & Begg, C.E., 2001. Database systems. A Practical<br />
Approach to Design, Implementation and Management. Third Edition.<br />
Pearson Education, 2001. 1236 p.<br />
3. Date, C.J. & Darwen, H., 2000. Foundation for Future Database Systems:<br />
The Third Manifesto. 2nd edn. Addison-Wesley.<br />
4. Date, C.J., 2006. The Relational Database Dictionary. O' Reilly Media. <strong>11</strong>3<br />
p.<br />
5. Date, C.J., 20<strong>11</strong>. Go Faster! The TransRelational TM Approach to DBMS<br />
Implementation. bookboon.com [WWW]<br />
http://bookboon.com/en/textbooks/it-programming/go-faster (07.05.2012)<br />
6. Codd's Rules [WWW]<br />
http://isp.webopedia.com/TERM/C/Codds_Rules.html (13.04.2005)<br />
7. Groff, James R., 1999. SQL: the complete reference. Berkeley (Calif.)<br />
[etc.] : Osborne/McGraw-Hill. 994 p.<br />
8. Gulutzan, P. & Pelzer, T., 1999. SQL-99 Complete, Really. Miller<br />
Freeman. 1078 p.<br />
9. Gulutzan, P. & Pelzer, T., 2003. SQL Performance Tuning.<br />
Addison-Wesley. 495 p.<br />
36
TTÜ: Andmebaasisüsteemid (2012) © Erki Eessaar<br />
10.Dontcheff, J., 20<strong>11</strong>. Julian Dontcheff's Database Blog. <strong>11</strong>g XE beta:<br />
Oracle Database Express Edition. [WWW]<br />
http://juliandontcheff.wordpress.com/20<strong>11</strong>/04/02/<strong>11</strong>g-xe-beta-oracledatabase-express-edition/<br />
(07.05.20<strong>11</strong>)<br />
<strong>11</strong>.Microsoft Access 2000: Choosing between MSDE and Jet. White Paper,<br />
May 1999.<br />
12.Microsoft Jet Database Engine. [WWW]<br />
http://en.wikipedia.org/wiki/Microsoft_Jet_Database_Engine (<strong>11</strong>.05.2010)<br />
13.Mikli, T., 1999. Sissejuhatus infosüsteemidese. Tallinn.<br />
14.Molina, H.G & Ullman, J.D. & Widom J., 2000. Database System<br />
Implementation. Prentice Hall. 653 p.<br />
15.MSDE [WWW] http://en.wikipedia.org/wiki/Microsoft_Desktop_Engine<br />
(<strong>11</strong>.05.2010)<br />
16.Muller, R.J., 1999. Database Design for Smarties. Using UML for Data<br />
Modeling. Morgan Kaufmann Publishers. 442 p.<br />
17.Oracle Database 10g Express Edition FAQ [WWW]<br />
http://www.oracle.com/technology/products/database/xe/pdf/dbxe_faq.pdf<br />
(09.04.2006)<br />
18.Pelzer, T. System Tables. dbazine.com [WWW]<br />
http://www.dbazine.com/db2/db2-disarticles/pelzer4 (24.06.2005)<br />
19.Raidma, M., 2006. Viie relatsioonilise andmebaasisüsteemi võrdlemine<br />
ning parima välja valimine Saaty meetodi abil. Diplomitöö. Tallinna<br />
Tehnikaülikooli Informaatikainstituut.<br />
20.Vallaste, H. E-teatmik [WWW] http://www.vallaste.ee/ (<strong>11</strong>.05.2010)<br />
21.Voronova, J., 2009. Gathering information about a PostgreSQL database<br />
based on the system catalogue. Bakalaureusetöö. Tallinna Tehnikaülikooli<br />
Informaatikainstituut.<br />
22.Wiener, H., 2012. Mad Dog 21/21: The Codd Piece. IT Jungle, Vol. 21, No.<br />
6, February 13, 2012.<br />
[WWW] http://www.itjungle.com/tfh/tfh021312-story04.html (16.02.2012)<br />
37