17.03.2015 Views

Andmebaasid I - Teema nr. 11 - ttü informaatikainstituut

Andmebaasid I - Teema nr. 11 - ttü informaatikainstituut

Andmebaasid I - Teema nr. 11 - ttü informaatikainstituut

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!