Sissejuhatus andmebaasidesse
Miks on andmebaase vaja?
Paljude asutuste, rakenduste ja teenuste lahutamatu osa on tänapäeval andmed. Neid on vaja talletada ja tagada kiire juurdepääs info saamiseks. Väiksemate andmehulkade puhul on võimalik hoida andmeid näiteks paberil, kuid andmehulga kasvades muutub see kiirelt ajakulukaks ja ebaefektiivseks tegevuseks. Lahenduseks on andmebaas, kuhu on võimalik salvestada suuri andmekogumikke. Andmebaas tagab ka korrektse andmete seisu ja kiire ligipääsu infole mitmetele osapooltele korraga. Selle toel töötavad ka erinevad veebiteenused nagu näiteks internetipank, e-raamatukogu, Facebook jne. Neid teenuseid kasutades suhtleb kasutaja andmebaasiga, veebileht on lihtsalt mugav kasutajaliides selle tegemiseks.
Tänapäeval ei hoita andmeid aga enam ainult selle eesmärgiga, et omada ülevaadet inventuurist või võimaldada mõne veebiteenuse töötamist. Andmebaasid on ettevõtetele äriliselt väga tähtsad. Näiteks eelnevalt väljatoodud internetipanga teenuse näitel on pangal, kes sellist teenus pakub, suur eelis nende pankade ees, kes seda ei võimalda. Peale teenuste kasutamise mugavuse pakkumise kliendile võimaldavad andmebaasis olevad andmed teha klientidele spetsiifilisi otsusi ja pakkumisi, isegi kui klientide arv kasvab suureks. Seda ei tee ainult pangad, vaid pea kõik ettevõtted. Näiteks Walmart kogub tänapäeval rohkem kui 2.5 petabaiti (78 tuhat korda rohkem, kui keskmise nutitelefoni mälumaht) andmeid iga tund. Seda andmestikku ostude ja klientide kohta kasutatakse analüüsi sisendiks ja tulemusena saadakse teada, mida ettevõte tegema peaks, et edukam olla. Sellise andmemahu hoiustamiseks ja mõistliku ajaga töötlemiseks on vaja kasutada andmebaase.
Andmebaas ja andmebaasi juhtimissüsteem
Andmebaas (database) - omavahel seotud ja
süstematiseeritud andmete kogum, mis lisaks
andmetele sisaldab eneses ka nende andmete
struktuuri (koosseisu) kirjelduse.
Andmebaasi juhtimissüsteem e. haldussüsteem
(ABJS – DBMS) - programm, mis “oskab” vastavalt
andmebaasis olevale kirjeldusele tõlgendada seal
olevaid andmeid.
Seega andmebaas on koht, kuhu andmed salvestatakse. Seda võib ka ette kujutada kui tabelite kogumit. Tasub aga tähele panna, et näiteks Exceli tabelisse saab ka andmeid salvestada, aga see ei ole siiski andmebaas. Sinna tabelisse sisestatud andmed ei ole süstematiseeritud ja ei ole kirjeldatud ka andmete tüüpe, seoseid ja muid omadusi, mida järgmistes peatükkides tutvustatakse. Exceli tabelis saab ka ühte tulpa salvestada mitut tüüpi väärtusi, kuid andmebaasis seda teha ei saa.
Andmebaasi juhtimissüsteem on programm, mille abil saab luua ühenduse andmebaasiga. Kui andmebaasi pole, siis saab andmebaasi juhtimissüsteemiga selle luua. Ühenduse loomise järel saab juba läbi juhtimissüsteemi andmebaasi manipuleerida. Sagedasemad operatsioonid on näiteks andmete pärimine, lisamine, muutmine ja kustutamine.
Andmebaas internetipanga näitel
Alloleval skeemil on näha tüüpilist andmebaasi kasutusjuhtu internetipanga näitel. Kasutaja siseneb internetipanka oma kontoga, sisestades kasutajatunnuse ja parooli. Nende sisestamisel saadetakse päring andmebaasi, et kontrollida, kas selline kasutaja eksisteerib. Kui vastus on positiivne, siis logitakse kasutaja internetipanka sisse ja kasutajale kuvatakse andmeid, mis on salvestatud andmebaasi selle kasutaja kohta. Soovi korral on võimalik kasutajal ka andmebaasis muudatusi teha. Näiteks sõbrale rahaülekannet tehes. Selle tulemusel muutuvad andmebaasis andmed nii kasutaja kui ka tema sõbra kohta.
Allolevalt skeemilt saab näha kirjeldatud protsessi. Skeemilt on puudu veel olulisi vahepunkte, aga neid siin kursusel ei käsitleta.
Ülaltoodud näitest on näha, et paljud kasutajad võivad andmebaasiga korraga suhelda. On oluline, et andmebaas võimaldaks kiiret juurdepääsu andmetele ja seda paljudele kasutajatele korraga ükskõik, kus nad ka ei asuks. Lisaks sellele peab olema andmebaasi kasutus ka turvaline ning iga kasutaja peab nägema ainult neid andmeid, millele tal õigused on.
Andmebaasi loomise protsess
Skeemil on näha protsess, kuidas luuakse andmebaas. Kõik algab ühest suurepärasest ideest. Kui idee on olemas, siis tuleb läbi viia põhjalik analüüs, mida andmebaas sisaldama peab, et ideed ellu viia. Seda saab kergelt teha, kui vestelda uue andmebaasi tulevaste kasutajatega ja uurida, mida nad näha tahaksid. Näiteks ÕIS-i kasutajana tahaks tudeng näha oma hinnete kokkuvõtet, läbitud aineid jne.
Kui analüüs teha halvasti, siis võib järgmistes protsessides ilmneda selle arvelt rohkem probleeme ja peab ka vahel tagasi liikuma, et lahenduses kohandusi teha.
Analüüsiga valmib ka esimene visuaalne mudel tulevasest andmebaasist. Seda kutsutakse loogiliseks mudeliks. Tegu on mudeliga, mis kirjeldab ära meie loodava andmebaasi struktuuri lihtsustatud kujul. See tähendab, et mudel kujutab küll andmebaasi, aga lihtsuse mõttes on sealt välja jäetud palju infot. Selle mudeliga tutvume lähemalt järgmises peatükis.
Loogilise mudeli edasiarendus on juba relatsiooniline mudel, kus kirjeldatakse ära andmebaas sellisena, nagu ta päriselt olema saab. Selle mudeliga tutvume kolmandas peatükis.
Peale mudelite valmimist ja andmebaasi käivitamist vastavalt relatsioonilisele mudelile toimub andmehõive, mille käigus täidetakse andmebaas andmetega. Seejärel arendatakse välja rakendus või rakendused, millega saab mugavalt andmeid vaadelda, lisada ja muuta. Lõpuks jääb alles ainult rõõm kasutada loodud andmebaasi ja teostada jooksvalt edasiarendusi ja hooldusi.
Andmed ja nende tüübid
Andmed on kõikjal meie ümber. Andmed kirjeldavad fakte erinevate nähtuste, isikute, objektide või protsesside kohta. Nende töötlemisest või tõlgendamisest saadakse informatsiooni. Näiteks võib vaadelda üliõpilaste hindeid ja arvutada nende põhjal keskmise hinde.
Igapäevaselt sellele tähelepanu ei pöörata, aga iga nähtuse, isiku, objekti või protsessi kohta käival faktil on ka andmetüüp. Kui aga tahta salvestada andmeid andmebaasi, siis tuleb hakata hoolikalt mõtlema, et mis tüüpi andmed on. Andmebaasis on vaja määrata andmetüüpe selleks, et tagada andmete korrektsus. Näiteks annab andmebaas veateate, kui kogemata tahta salvestada täisarvu kohta, kuhu on määratud tüübiks hoopis sõne, ehk tekst. Andmetüübid määravad ka ära selle, millised operatsioone on võimalik andmetega teha. Näiteks, kui liita kokku kaks arvu 1 + 1, siis peaks tulemuseks olema 2. Samas kui liita kokku need arvud tekstina, siis oleks tulemuseks "1" + "1" = "11".
Andmetüüpe on erinevad, aga väga üldiselt jagunevad andmetüübid kolmeks:
- tekstilisteks, kuhu saaks panna näiteks inimeste ees- ja perekonnanimed;
- arvulisteks, kuhu saaks panna näiteks inimeste pikkused ja kaalud ja
- ajalisteks, kuhu saaks näiteks panna inimese sünniaja.
Andmetüübid võivad erinevatel andmebaaside juhtimissüsteemidel - ABJS (ingl Database Management System DBMS) erineda, seetõttu tuleb enne uue andmebaasisüsteemiga tööle hakates tutvuda kindlasti antud andmebaasisüsteemi dokumentatsiooniga.
Tekstilised andmetüübid
Tekstilist andmetüüpi kasutame kui on tarvis talletada teksti. Tekst võib koosneda ühest tähest (sümbolist) või tervest raamatust (palju sümboleid).
Andmetüübi valimisel teksti talletamiseks tuleb analüüsida, kas teksti pikkus (mida tabelisse salvestada) on teada või teksti pikkus ei ole teada. Näiteks isiku nime puhul võime teha üldistuse, et üle saja sümboli vaja ei ole.
Samas, kui tahame tabelisse salvestada näiteks veebilehelt kogutud vabatekstina sisestatud tagasisidet, siis võib-olla mõistlik mitte piirata tabelis oleva andmetüübi pikkusega salvestatava teksti pikkust.
PostgreSql pakub tekstiliste andmete hoidmiseks peamiselt kolme andmetüüpi:
- varchar(n) - tekst kuni n sümbolit;
- char(n) - fikseeritud pikkusega tekst n sümbolit;
- text - pikemad tekstid, mille pikkus pole teada.
varchar(n) ja char(n) erinevus seisneb eelkõige selles, et varchar(n) täidab mälus kuni n ühikut ruumi. Näiteks varchar(25) väljale salvestades kümnest sümbolist koosneva sõne, hõivatakse mälus 10 ühikut. Char(25) seevastu, isegi kui char(25) väljale salvestada kümnest sümbolist koosnev sõne, siis hõivatakse mälus ikka 25 ühikut.
Arvulised andmetüübid
Arvulisi andmetüüpe kasutatakse arvulisel kujul andmete hoidmiseks.
Levinumad arvulised andmetüübid PostgreSql andmebaasis on:
- integer - Täisarvude hoidmiseks
- numeric(kogupikkus,komakohti) - Kümnendmurruliste väärtuste hoidmiseks
- real ja double precision - Ratsionaalarvude hoidmiseks
- serial - Olemi unikaalne võti, mida ei ole vaja sisestada, mis automaatselt suureneb ühe võrra
Integer suuruse valikul tuleb analüüsida, mis on võimalik suurim väärtus, mida tuleb salvestada. Näiteks isiku vanuse salvestamiseks piisab smallint (2 baiti) suurusest. Samas, kui tuleks kogu maailma rahvastiku arvu salvestada, siis on vaja võtta kasutusele bigint suurus.
Numeric andmetüübi puhul on vaja ette anda kogupikkus ja pärast koma kohtade arv. Näiteks, kui meil on vaja sisestada arv 123.45, siis selle tüübiks sobiks numeric(5,2), sest kokku on 5 arvu ja 2 kohta on pärast koma.
Serial andmetüüp on mõeldud ainult positiivsete arvude jaoks.
Aega kirjeldavad andmetüübid
Kuupäevade ja kellaaja märkimiseks on eraldi andmetüübid.
Võib küsida, et miks ei võiks kasutada kuupäeva hoidmiseks mõnda teksti hoidmiseks mõeldud andmetüüpi või mõnda numbrite hoidmiseks mõeldud andmetüüpi? Tehniliselt ei piira miski tekstina salvestada kuupäeva kujul "2021-12-29". Samuti võib proovida mahutada kuupäeva ka numbrina. Näiteks integer andmetüübiga väljale kujul 20211229 või loome kolm eraldi integer välja - aasta, kuu ja päev.
Iga andmetüübiga on aga seotud andmebaasi juhtimisüsteemiga kaasa tulevaid funktsioonid. Näiteks funktsioon avg(), mis arvutab aritmeetilise keskmise on mõeldud arvulisteste andmetüüpidega opereerimisel. Funktsioon upper(), mis muudab suurtähtedeks on aga mõeldud tekstiliste andmetüüpidega tegelemiseks.
Omaette funktsioonid tulevad kaasa ka kuupäevade ja ajaga seotud andmetüüpidega. Seega on rangelt soovitatav kuupäevade ja ajaga seotud andmete talletamiseks kasutada ajalisi andmetüüpe, millest sagedamis kasutatavad on:
- date - kuupäev,
- time - kellaaeg ja
- timestamp - kuupäev koos kellaajaga.
Kahendväärtus
Esineb olukordi, kus andmevälja võimalikke väärtuseid on kokku kaks. Näiteks, kui on vaja salvestada tõeväärtust, kas inimesel on juhiload või ei ole. Võimalikud väärtused oleks sellisel juhul true või false. Selleks on PostgreSQLis olemas andmetüüp BIT, mille ainsateks väärtusteks saab olla 0 või 1. IT maailmas on tüüpiliselt nii, et true väärtust sümboliseerib 1 ja false väärtust sümboliseerib 0.
Lisaks saab PostgreSQLis kasutada ka Boolean andmetüüpi, mille väärtused saavad olla ka True ja Falce.
AVA TEST
<< Eessõna | Andmebaasi modelleerimine >> |