Raalprojekteerimine
Euroopa struktuurfondide logo
Automatiseerimise viide Mehhatroonikaseadmete viide Pneumoautomaatika viide Siemens LOGO! viide Siemens S7-1200 viide

ANDMEHALDUS JA ANDMEBAASID

Relatsioonmudel

Mudeli paindlikkus, skaleeruvus ning liiasuste puudumine

Parim mudel, või vähemalt kõige edukam/levinum, on relatsiooniline, millises kirjed on asendatud ridadega, grupeeritud tabelitesse, millised omavahel on seotud ridade sisu osadega ridades endis. See, mida kutsutakse olemiks ER mudelis on rida relatsioonilises mudelis ja tabel relatsioonilises tabelis vastab olemite hulgale (grupile) ER mudelis. Relatsioonilise mudeli veerudvastavad ER mudeli atribuutidele. Terminit seos (suhe)kasutatakse mõlema mudeli puhul näitamaks, kuidas olemid/read ja/või olemite grupid/tabelid on omavahel seotud. Ka suhete loomise viis on sarnane, kuna kasutatakse atribuute/veerge nagu tavaliselt kahe tabeli puhul.

Identifikaatoreiddefineeritakse nii rea üheseks identifitseerimiseks tabelis, kui ka otsingute kiirendamiseks. Indeks on sarnane ER mudeli võtmele, kuna unikaalsed identifikaatorid (tunnus) on võrdväärsed kandidaatvõtmega. Võivad olemas olla ka mitteunikaalsed tunnused ja nendel pole vastet ER mudelis, kus neid ei kasutata (pole olemas). Mitteunikaalsed tunnused tulenevad mitte sisu kaalutlustest vaid pigem jõudluse kaalutlustest, mis peaksid teoreetiliselt piirduma füüsilise tasandi teostamisega, kuid neid saab efektiivselt defineerida ainult andmete loogilist struktuuri teades.

Enne relatsioonmudeli uurimist on kasulik kokku võtta erinevad liigitused. On kaks relatsiooniliste andmebaasidega seotud fundamentaalset aspekti (põhiseisukohta): formaalne teooria ja mitmesugused praktilised rakendused.

Kuigi need kaks aspekti langevad kokku, lahknevad nad liigituselt nagu on näidatud järgnevas tabelis:

E/R Mudel Formaalne teooria Praktiline rakendus
Olemite hulk Suhe (!) Tabel
Olem Korteež (Tuple) Rida (kirje)
Attribuut Attribuut Veerg (väli)
Kandidaatvõti Unikaalne indeks
Haldusala (Domain) Lubatav väärtus

Relatsiooniline andmebaas koosneb tabelitest, millistest igaüks esindab "subjektide" rühmaga seotud informatsiooni, näiteks firma klient (ostja). Tabel koosneb ridadest, millistest igaüks sisaldab informatsiooni, mis on seoses täpselt defineeritud subjektiga, näiteks konkreetne ostja. Tabel koosneb ka veergudest, mis esindavad mitmesugust ühetüübilist informatsiooni (ärinimi , rahaline kood, ...) subjektide kohta. Unikaalnet indeksit (samuti tuntud, kui primaarvõti ehk esmane võti) kasutatakse spetsiifiline rea eristamiseks tabeli sees. Kaks tabelit võivad olla teineteisega seotud mõlemas tabelis eksisteerivate sama sisuga veergude kaudu, näiteks tabel "ostja" ja "arve" võivad omada suhet läbi veeru, mis sisaldab ostja koodi, kuna need andmed on olemas mõlemas tabelis. [5]

Hästi projekteeritud relatsioonilisel andmebaasil on rida olulisi ja kasulikke tunnuseid:

  • Puudub andmete liiasus. See tähendab, et andmebaasis olemasolevaid andmeid ei saa tuletada sama andmebaasi muude andmete ühendamise või kombineerimise teel. Liiasuse näiteks on veerud või read korduvate andmetega. On mitmesuguseid tehnikaid ja samme liiasuse kaotamiseks ja neid vaadeldakse lähemalt "normaalkujude" lõigus. Ilmselgelt võivad eksisteerida soovitud või vajalikud dubleerimised, aga need on seotud andmebaasi varundamise või RAID-süsteemis salvestamisega. Selline dubleerimine ei puuduta loogilist taset vaid sõltumata sellest, kuidas see on tekitatud, on see seotud füüsilise tasandiga.
  • Vähendatud dubleerimine. Teatud dubleerimise tase on vajalik suhete ehk seoste loomiseks. Heaks näiteks on ostja koodi veeru olemasolu tabelis nagu ülaltoodud näites: see on olemas nii ostjate tabelis, eristamaks üht rida teisest kui ka arvete tabelis, osutamaks millisele ostjale iga arve on esitatud.
  • Viiteline terviklus. Peab olema võimatu kustutada informatsiooni, mis on vajalik teise informatsiooni kvalifitseerimiseks. Kasutades jälle eelmist näidet viiteline terviklus väldib ostja kustutamist, kellele arve on välja kirjutatud, vältimaks arveid olematutele ostjatele. Viiteline terviklus võib töötada ka pööratud viisil, tühistades kõik arved konkreetsele ostjale, kui ostja ennast on tühistanud (tavaliselt kirjeldatud juhtum ei ole teostatav olemasoleva seaduse tõttu, mis keelab aruandluse andmete tühistamise).

Andmete uuringu suur kiirus, mis saadakse indeksite defineerimisega. Mitte ainult unikaalne indeks (või unikaalne võti) pole kasulik otsingute kiiruse suurendamiseks, vaid ka mitteunikaalne indeks on kasulik kiirendamaks otsinguid. Mitteunikaalse indeksi näiteks on indeks, mis on loodud näiteks firma juhataja perekonnanime abil: see ei ole unikaalne kuna erinevad juhatajad võivad omada sama perekonnanime. Vaatamata sellele lubab see indeks firma andmete kiiret leidmist, kui ainult juhataja perekonnanimi on teada. [5]

Tähtsamad relatsioonilise mudeli terminid

Relatsioon - seoste kogum, andmetabel. Ametlikuma definitsiooni järgi on relatsioon samade atribuutidega olemieksemplaride ja nende atribuutide hulk. Baasrelatsioon on relatsioon, mille kirjed on füüsiliselt andmebaasi salvestatud. Vaade e. virtuaalne relatsioon on ühe või mitme baasrelatsioonile rakendatud relatsioonilise operatsiooni tulemus, mille tulemuseks on samuti relatsioon. Selle relatsiooni kirjed pole andmebaasi salvestatud vaid vaate abil kasutaja jaoks dünaamiliselt konstrueeritud.

Kandidaatvõti (ka võtmekandidaat) (ingl. k. candidate key) on supervõti, mille alamhulk ei ole korrektne supervõti. See tähendab, et kandidaatvõtmest ei saa enam ühtegi atribuuti eemaldada, ilma et ta kaotaks unikaalsuse. Relatsioonil võib olla mitu kandidaatvõtit. Kandidaatvõtme omadused on:

  • unikaalsus - iga kandidaatvõtme väärtus identifitseerib üheselt ühe relatsiooni kirje
  • täielikkus - kandidaatvõtmest ei saa eemaldada atribuute, ilma et ta kaotaks unikaalsuse omaduse.

Primaarvõti (ka esmasvõti) (ingl. k. primary key) on kandidaatvõti, mis on valitud relatsiooni kirjeid unikaalselt identifitseerima. Primaarvõti on võti, mis üheselt identifitseerib ühe kirje. Valiku kriteeriumid:

  • atribuudi domeen (peaks olema võimalikult lühike väärtus)
  • atribuutide arv (peaks olema võimalikult vähe atribuute)
  • tulevane unikaalsuse tõenäosus (peaks sisaldama unikaalseid väärtuseid nii praegu kui ka tulevikus).

Alternatiivseteks võtmeteks(ingl. k. alternate key) nimetatakse primaarvõtmeks mitte valitud kandidaatvõtmeid.

Supervõti (ingl. k. superkey) on atribuut või atribuutide kombinatsioon, mis identifitseerib unikaalselt relatsioonis olevaid kirjeid. Supervõti võib sisaldada atribuute, mida pole unikaalsuse tagamiseks vajalikud, st. et temast võib atribuute eemaldada ja ta tagab ikkagi unikaalsuse.

Intelligentne võti ehk sisulise tähendusega (informatiivne) võti (ingl. k. intelligent key). Sisulise tähendusega võti on küll unikaalne, kuid selle väärtus omab kasutaja jaoks tähendust, näiteks isikukood.

Võõrvõti (välisvõti, foreign key) näitab teisele relatsioonile, aitab tagada viiteterviklust (näide ja seletus eelmises peatükis). Võimaldab siduda relatsioone/kirjeid üksteisega kokku.

Näide andmete normaliseerimiseks [5]

Vältimaks andmete liiasust, võib kasutada protsessi, mis püüab muuta andmebaasi struktuuri, sundides tabelit läbima kolme järjestikust normaalkuju.

Esimene normaalkuju (1NF): öeldakse, et tabel on esimesel normaalkujul, kui see kirjeldab ühte olemit ja ei sisalda vektoreid või korduvaid atribuute.
Vaatleme näiteks tabelit, mis sisaldab ühe kursuse tundide andmeid. Iga tunni rea jaoks on kood, õpetaja ja õpilase andmed. See tabel ei ole esimesel normaalkujul, kuna õpilase andmed on vektor, mis vastab tunnile.

Ainekood Aine Õpetaja Õpilase kood Õpilase perekonnanimi Õpilase nimi
A01 Kavandamine Lind S01 Rooväli Marek
S02 Peterson Maria
S03 Martson Ella
A02 Loomine Sepp S02 Peterson Maria
S03 Martson Ella

Täpsem olles, on iga tund seotud rohkem kui ühe õpilasega ja see on väljendatud öeldes, et on olemas õpilaste vektor (rühm õpilasi) igas tunnis. Selle tabeli esimesele normaalkujule viimiseks on vaja lahutada õpilaste andmed ja tunnid, luues uue õpilaste tabeli. Tundide tabelis on niipalju ridu, kui on erinevaid tunde, ainete nimekirja kantud õpilaste tabelis on niipalju ridu, kui sellele ainele on õpilasi registreerunud ja iga õpilane peaks seal esindatud olema rohkem kui üks kord. Selles tabelis peaks olema ka täiendav veerg tunni koodiga, millele õpilane on end registreerinud. [5]

Tunnid
Aine Õpetaja
Kavandamine Lind
Loomine Sepp

Registreerunud õpilased
Ainekood Õpilase kood Õpilase perenimi Õpilase eesnimi
A01 S01 Rooväli Marek
A01 S02 Peterson Maria
A01 S03 Martson Ella
A02 S02 Peterson Maria
A02 S03 Martson Ella

Teine normaalkuju (2 NF): tabel on teisel normaalkujul, kui ta on esimesel normaalkujul ja kõik atribuudid sõltuvad ainult primaarvõtmest.
Vaadates eelmist tabelit "Registreerunud õpilased", peaks primaarvõti, mis on vajalik eristamaks ridu üksteisest, koosnema ainekoodist + õpilase koodist. Võib märgata, et õpilase eesnimi ja perekonnanimi sõltuvad ainult õpilase koodist ja mitte kogu primaarvõtmest.

Viimaks tabelit teisele normaalkujule, peame välja võtma andmed, mis ei ole täielikult sõltuvad primaarvõtmest ja lisama need andmed uude tabelisse "õpilased". Tasub tähele panna, et informatsiooni kaotust ei teki, kuna veerg õpilase kood on olemas mõlemas tabelis ja lubab nende tabelite vastastikust suhet.

Registreerunud õpilased Õpilased
Ainekood Õpilase kood Õpilase kood Õpilase perenimi Õpilase eesnimi
A01 S01 S01 Rooväli Marek
A01 S02 S02 Peterson Maria
A01 S03 S03 Martson Ella
A02 S02
A02 S03

Kolmas normaalkuju (3 NF): tabel on kolmandal normaalkujul, kui ta on teisel normaalkujul ja kõik tema atribuudid, mis pole seotud primaarvõtmega on üksteisest sõltumatud.

Vaadake õpilaste tabelit, mis sisaldavad isikuandmed nagu näiteks järgmine tabel.

Õpilased
Kood Perenimi Eesnimi Sünniaeg Vanus Viimati uuendatud
S01 Rooväli Marek 11.09.1955 50 12.11.2001
S02 Peterson Maria 01.02.1990 14 15.12.2004
S03 Martson Ella 09.06.1978 26 26.01.2005

Selles tabelis olevat vanust võib arvutada sünnikuupäeva kaudu ja seepärast on see informatsioon liiane, selle puuduse võib aga lihtsalt kõrvaldada viies õpilaste tabeli vastavusse kolmanda normaalkujuga.

Tunnid
Ainekood Aine Õpetaja Istekohti ruumis Vabu kohti
A01 Kavandamine Lind 5 2
A02 Loomine Sepp 6 4

Mõnikord pole sõltuvust lihtne tuvastada. Vaatame "tunnid" tabelit, mis ka registreerib iga tunni võimaliku kohtade arvu. Vabade kohtade arvu võib arvutada, kui lahutada registreerunud õpilaste arv ruumi kohtade arvust. Veerg "Vabu kohti" tuleks tabelist kõrvaldada, et viia tabel vastavusse kolmanda normaalkujuga.

Creative Commons Licence
"Raalprojekteerimine" by Eduard Brindfeldt and Urmo Lepiksoo is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Estonia License .