Andmebaaside administreerimine
Peale andmebaasi valmimist ei ole töö lõppenud. Selleks, et rakenduse või rakenduste kaudu toimiks andmebaasiga suhtlemine sujuvalt on vaja andmebaasi pidevalt hooldada ja edasi arendada. Selles peatükis antakse lühike ülevaade mõnest enim levinumast eelmainitud toimingust.
Vaated
Kui kasutada mingit rakendust, nagu Eurovisiooni näites välja toodud veebirakendust, siis kasutajad ei tahtnud näha andmeid selliste tabelitena nagu need andmebaasi salvestati. Kui kasutaja tahab näha riike, kes on jõudnud finaali, siis ta ei soovi hakata uurima tabeleid "Laulud" ja "Riigid", et sealt siis seoste kaudu välja uurida, kes finaali jõudnud on. Selleks luuaksegi vaateid. Vaated kombineerivad kokku andmebaasi tabelite info sellisel kujul nagu kasutaja soovib.
Võib kokku liita ka relatsiooni tunnuseid nagu näiteks eesnimi ja perekonnanimi. Andmebaasi sai need eraldi tunnustena salvestatud, et oleks võimalik teostada päringuid eesnime ja perekonnanime järgi eraldi, aga vaates võib näidata neid juba ühe väljana, kus eesnimi ja perekonnanimi on kokkuliidetud ja näiteks tühik vahele lisatud.
Peale mugavuse on vaadete eelisteks ka ajakohasus. Näiteks olukorras, kus pood salvestab tehinguid andmebaasi ja nende põhjal on loodud vaade statistika vaatamiseks, kus kuvatakse viimase 10 päeva tehingute koguseid, summasid jne. Kui vaade on koostatud korrektselt, kasutades statistika loendamise algusajaks andmebaasi poolt pakutavat väärtust CURRENT DATE, siis see vaade on alati ajakohane. Niipea, kui saabub uus päev, siis muutub selle statistika vaate sisu.
Kuvades infot vaadetena tekib ka andmete sõltumatus. See tähendab, et kui lisada näiteks andmebaasi mingile relatsioonile lisatunnus, siis vaade jääb kasutajale endiseks. Probleeme tekitab, aga see, kui kustutada andmebaasis tunnus, mida vaade kasutab.
Lisaks eelnevale lisavad vaated päris andmetele kaitset pahatahtlike inimeste eest. Kui mõni pahatahtlik inimene murrab sisse keskkonda, kus kuvatakse vaid vaateid, siis see inimene võib vaadetes teha kustutamisi, lisamisi ja muutmisi, aga päris andmed andmebaasis sellest ei muutu. Sellepärast on päris andmebaasi tabelitele ligipääs ainult vähestel inimestele, kelleks on enamasti süsteemi administraatorid.
Vaated tehakse valmis tegelikult juba enne rakenduse loomist vastavalt rakenduse nõuetele, aga edasiarenduse käigus võib neid alati juurde tekitada ja muuta ka olemasolevaid.
Alloleval skeemil on näha paremal ühte võimalikku vaadet.
Jälgimine ja trigerid
Tihti on vajalik, et loodud andmebaas reageeriks teatud sündmustele mingisuguse operatsiooniga. Oletame, et leidub relatsioon "Isik", kus on tunnused "Sünniaeg" ja "Täiskasvanu", kus viimane tähistab seda, kas tegu on täiskasvanuga või mitte. Sellisel juhul ei saa keegi iga päev käia ja uuendada "Täiskasvanu" väärtusi. Sellises olukorras olekski sobilik üles seada triger, mis hetke kuupäeva muutumise peale vaatab üle kõik isikud ja uuendab tunnuse "Täiskasvanu" väärtust, kui see on tarvilik.
Selliseid andmebaasi omadusi saab implementeerida trigeritega. Trigeri loomisel täpsustatakse ära sündmus, tingimus ja tegevus, mis järgneb, kui tingimus on tõene. Kui andmebaasis toimub mingi sündmus, millele on loodud triger, siis vaadatakse üle trigeri tingimused ja kui need on tõesed, siis käivitatakse ka vastav operatsioon.
Mõned trigerid luuakse andmebaasi automaatselt, näiteks seoste loomisel relatsioonide vahel. Olgu meil relatsioonid "Vanem" ja "Laps", mille vahel on loodud seos lisades lapsele välisvõti "Vanem_Isikukood". Nüüd, kui muuta mingil põhjusel relatsioonis "Vanem" isikukoodi, siis muutub see ka automaatsel relatsioonis "Laps".
Trigereid saab liigitada sisemisteks ja välisteks trigeriteks. Sisemised trigerid jälgivad sündmusi andmebaasis nagu uue kirje ilmumine. Välimine triger aga jälgib väliseid sündmusi, näiteks hetke kuupäeva muutumine.
AVA TEST
Päringute optimeerimine
Tihti saab infot pärida andmebaasist mitmel võimalikul moel. Optimeerimise eesmärk on leida see kõige efektiivsem päring ehk päring, mis vajab vähem aega ja mälu.
Esimene asi, millele tuleks tähelepanu pöörata on see, kas infot päritakse kõige mõistlikumast tabelist või siis vaatest. Näiteks, kui meil on vaja pärida kõikide riikide nimed, kes on kunagi Eurovisioonil osalenud, siis ei ole mõistlik pärida neid vaatest, kus on loetletud kõik esinemised. Kui sealt neid pärida, siis peab läbi käima kõik read ja iga nime juures võrdlema, kas see nimi on juba leitud. Selle asemel võiks nimed pärida otse relatsioonist "Riik", kus on teada, et korduvaid riigi nimesid niikuinii ei ole.
Võtmeteks on soovitatav kasutada INTEGER tüüpi ID välja. Esiteks saab lasta andmebaasil selle ise genereerida ja teiseks võtab see vähem mälu, kui näiteks VARCHAR isikukood. Seega isegi, kui saab kasutada võtmena isikukoodi, siis oleks mõistlik genereerida eraldi INTEGER tüüpi tunnus ID. Selle tulemusel on võtmete võrdlused kiiremad, kui teostatakse päringuid.
Olulist rolli päringu kiiruses mängib ka see, kui palju ressursse, ehk tunnuseid, päring kasutab. Päring tuleks kirjutada nii, et see kasutaks võimalikult vähe ressursse. On olemas ka algoritm, mis juhendab, kuidas üks päring selliseks muuta. Seda algoritmi tutvustatakse 6EAP-ses andmebaaside aines (LTAT.03.004).
Väikeste andmebaaside puhul ei ole väga hästi aru saada, miks on vaja päringuid optimeerida. Nende puhul tuleb päringule vastus kiiresti isegi siis kui päring on väga ebaefektiivne. Küll aga muutub olukord kiiresti, kui andmebaasi andme hulk kasvab väga suureks. Kui teostada ebaefektiivseid päringuid suurte andmebaaside peal, siis võivad ooteajad venida väga pikaks. See aga tekitab halvema kasutajakogemuse ja andmebaasi tellija võib selle arvelt kaotada kasutajaid.
AVA TEST
Õigused
Selleks, et süsteem oleks turvaline, tuleks kasutajaid piirata õigustega. Õigustega on võimalik piirata seda, kes tohib andmeid sisestada, muuta, kustutada, vaadata ja ise õigusi jagada. Tavaline lähenemine õiguste jagamise puhul on see, et igaüks saab ainult neid õigused, mis tal vaja on, ehk siis võimalikult vähe. Erinevaid õiguste jagamise näiteid saab tuua pea igast rakendusest. ÕIS-is ja Moodles näevad tudengid ja õppejõud erinevaid vaateid, õppejõul on õigus näha rohkemat ja samal ajal ka muuta andmeid. Näiteks Facebookis on kasutajal õigus anda õigusi teistele isikutele selle kohta, kes tema profiili näevad.
Tagavara koopiad
Andmebaasi hooldustööde üks osa on andmete varundamine ehk tagavara koopiate tegemine. See on eelkõige vajalik selleks, et kui andmebaasiga midagi juhtub, siis saab endise seisu taastada. Andmebaas võib kaotsi minna pahatahtlike rünnakute tõttu kui ka inimlike eksituste pärast. Seda, kuidas andmebaasist koopiat teha aeg-ajalt, on erinevaid võimalusi. Koopiat võib teha näiteks manuaalselt ise. Levinum variant on aga see automatiseerida. Võib luua trigeri, et teatud aja tagant tehakse andmebaasist koopia või näiteks iga 10 kirje lisamise järel. Võib teha koopia ka iga muudatuse järel, kuid andmebaasides, kus tehakse lühikese aja jooksul pidevalt palju muudatusi, võib see lisada suure lisakoormuse ja peale selle on vaja palju mälu koopiate salvestamiseks.
Dokumentatsioon
Üks oluline aspekt andmebaasi arendamisel, mis aga tihti unarusse jäetakse, on dokumentatsioon. Dokumentatsioon on eelkõige kasulik neile, kes liituvad arendustöödega hiljem. Dokumentatsioon on see koht, kust peaks olema võimalik lugeda ja aru saada, mis on andmebaasis olemas, kuidas andmed seotud on, mis tunnused relatsioonidel on, mida need tähendavad jne. Dokumentatsioon võiks olemas olla ka arendustööde kohta, et milliseid lähenemisi kasutatakse, mis vahendeid kasutatakse ja kuidas üldiselt erinevad asjad omavahel töötavad.
Dokumentatsiooni on võimalik ka osaliselt automaatselt genereerida. Seda küll ainult siis, kui koodi on lisatud korrektses stiilis kommentaare ja on valitud mõistlikke tabelite, vaadete, tunnuste ja muutujate nimesi. Vastasel korral automaatselt genereeritud dokumentatsioonist ei ole lihtsalt väga abi.
Kuidas pahatihti olukord tegelikult on
Allikas: https://www.zentao.pm/agile-knowledge-share/tree-swing-project-management-cartoon-97.mhtml
<< Relatsiooniline mudel | Kirjandus >> |