Keri sisuni

Relatsioonilised andmebaasid

Kuigi andmebaasidest räägitakse selleks ettenähtud aines peame me oma veebirakenduste ehitamiseks veidike ajast ette ruttama ja tegema kiire ülevaate relatsioonilistesse andmebaasidesse. Populaarseimad neist on Microsofti SQL Server, Oracle, MySQL ja PostgreSQL.

SQLite

Meie kasutame selles aines SQLite nimelist andmebaasi. See on failipõhine väike andmebaas, mis on mõeldud pigem rakendustele sisemiseks andmete hoidmiseks. Võrreldes andmebaasiserveriga on peamine erinevus see, et andmeid töödeldakse veebirakenduse protsessis ning toetatud on korraga üks kasutaja. See-eest ei pea grupitöö tegemiseks masinatesse paigaldama mõne suurema serveri arendusversiooni.

Tabelid

Relatsioonilised andmebaasid hoiavad andmeid tabelites, mis on jagatud veergudeks. Igat veergu iseloomustavad järgmised atribuudid:

  • Nimi
  • Tüüp (millist tüüpi väärtuseid antud väljal hoitakse - tekst, täisarvud, ratsionaalarvud jne)
  • Suurus (kui pikk võib olla tekst, kui täpne on ratsionaalarv)
  • Kohustuslikkus (kas antud väljal on NULL-väärtused lubatud)

Tabelites hoitakse andmeid ridadena. Kõik read sisaldavad tabeli loomisel defineeritud välju.

Joonisel on näha toodete tabel. Read jooksevad ülevalt alla ning veerud vasakult paremale.

Indeksid

Kui andmebaas on pisike, ei teki andmete pärimisel andmebaasist jõudlusega probleeme. Suuremate andmemahtude korral annab aga iga pisemgi möödapanek ennast tugevalt tunda. Üks viis päringuid kiiremaks muuta on indeksite kasutamine. Indeksid, mille saame tabelile lisada, aitavad andmebaasil andmeid kiiremini leida sarnaselt käsiraamatu märksõnade registrile.

Kui soovime aiatööde käsiraamatust leida kõik leheküljed, kus on mainitud sõna "hekikäärid", siis on meil selleks kaks võimalust. Me võime kasutada käsiraamatu tagumistel lehekülgedel asuvat märksõnade registrit, kus on olulisemad märksõnad tähestikulises järjestuses toodud ning sealt leiame huvipakkuvad leheküljed kiiresti üles. Teine variant oleks märksõnade registrit ignoreerida ning lapata käsiraamat esimesest viimase leheküljeni läbi. Ajakulu oleks sellisel juhul märkimisväärselt suurem kui märksõnade registri kasutamisel.

Samamoodi töötavad andmebaasi indeksid. Neid võib endale samuti ettekujutada kui märksõnade registreid, mille järgi leiab tabelitest ridu kiiremini üles.

Indekseid iseloomustavad tüüpiliselt järgmised andmed:

  • Nimi
  • Väljad (indeks võib sisaldada ka mitut välja)
  • Sorteerimisjärjestused (millised järjekorras sorteeritakse indeksisse kuuluvad väljad)
  • Unikaalsus (kas indeks kehtestab tema koosseisu kuuluvatele väljadele unikaalsuse nõude)

Primaarvõti

Primaarvõti on tabeli kõige tähtsam indeks, sest see annab tabelis olevatele ridadele identiteedi. Primaarvõtme järgi saab sama rea alati eksimatult üles leida kuniks rida tabelist kustutatud pole. Kui me pärime tabelist andmeid, siis vaikimisi on andmed alati sorteeritud primaarvõtme väljade järgi.

NB! Primaarvõti tuleb teile arvatavasti tuttav ette, sest koodinäidetes on tüüpiliselt primaarvõtme välja nimeks Id.

Primaarvõtmeid on kahte tüüpi:

  • Tehniline võti - primaarvõtme väärtus ei oma rakenduse äriloogika võtmes tähendust. Tehniline võti sisaldab tavaliselt ühte välja ja selle väärtuseks on mõni unikaalne tunnus nagu mõne loenduri väärtus või globaalselt unikaalne ID (GUID).
  • Loogiline võti - primaarvõtme väärtus omab äriloogilist tähendust. Arendajate maailmas loetakse seda täna küllaltki riskantseks ettevõtmiseks, sest kõik, mis omab äriloogilist tähendust, on inimeste endi sisestatud. Inimesed teevad vigu ja eksivad ning see tähendab seda, et taoline primaarvõti pole algusest lõpuni unikaalne.

NB! Erinevad andmebaaside haldamise vahendid kasutavad läbivalt primaarvõtme väljade tähistamiseks võtmega ikooni.

Võõrvõti

Relatsioonilise andmebaasi juures on mõiste relatsioon väga oluline. Relatsioonid on tabelite vahele defineeritud seosed, mille abil viiakse kokku väljad kahest erinevast tabelist.

Toodud joonisel on seos defineeritud ProductCategory ja ProductSubcategory ning ProductSubcategory ja Product tabeli vahele. Tavaliselt on seose ühes otsas nö. dominantse tabeli primaarvõti ja teises otsas alluva tabeli vastav väli. ProductSubcategory tabeli primaarvõtmeks on ProductSubcategoryId väli. See on seose see ots, mille juures on kollane võti. Product tabelis on väli ProductSubcategoryID ja see on seose teises otsas. Lõpmatuse märk (külili number kaheksa) tähendab seda, et Product tabelis võib ühele alamkategooriale vastata mitu rida.

Need hallide joontega toodud seosed joonisel ongi relatsioonid. ProductSubcategoryID välja Product tabelis nimetatakse võõrvõtmeks.

Kuigi võõrvõtmete maailm on kirju ja mitmekesine piisab meile hetkel järgmisest teadmisest: Product tabelis saab ProductSubcategoryId välja väärtuseks olla NULL või siis selline väärtus, mis vastab mõnele reale ProductSubcategory tabelis. Väärtusi, mida ProductSubcategory tabelis ProductSubcategoryID väljal ei eksisteeri me kasutada ei saa.

Ametlik terminoloogia

Termin Ingl. k. vaste Märkused
Tabel Table
Vaade View Andmebaasis salvestatud päring, mida saab kasutada võrdväärselt tabelitega
Rida Row
Veerg Column
Indeks Index
Võõrvõti Foreign key
Relatsioon Relation