TIETOKANTOJEN PERUSTEET

Relaatiotietokannan peruskäsitteet

E. F. Codd esitteli relaatiomallin peruskäsitteet vuonna 1970 artikkelissaan: E.F.Codd: A Relational Model of Data for Large Shared Data Banks, Communications of the ACM, Vol. 13, No. 6, June 1970, pp. 377-387. Malli perustana on selkeä matemaattinen käsitteistö. Toisaalta malli on hyvin yksinkertainen ja helposti hahmotettavissa.

Relaatio, arvo ja arvojoukko

Relaatiotietokantojen perusajatuksena on tiedon hahmotus matemaattisina relaatioina. Kukin relaatio kuvaa jotakin todellisuuden ilmiötä.

Relaatiomallin mukainen relaatio määritellään seuraavasti

Olkoon D1, D2, ..., Dn atomisista arvoista koostuvia arvojoukkoja (domain). Relaatio R on joukko monikkoja [tuple, n-tuple] (a1,a2,...,an), joiden ensimmäinen arvo a1 kuuluu joukkoon D1, toinen arvo a2 joukkoon D2 jne. Relaatio on siis ristitulon
D1  x D2  x ...  x Dn osajoukko.

Arvojoukko

Arvojoukko koostuu joukosta arvoja (value). Arvot ovat arvojoukon alkioita. Arvot ovat esimerkiksi nimiä asioille, mittalukuja tai koodeja. Arvojoukko voisi olla vaikkapa

Joukko matemaattisena käsitteenä

Matemaattisessa joukossa:

Ristitulo

Arvojoukkojen K ja P ristitulo:

X x Z =

{ (0,kissa), (0,koira), (0,marsu),
(1,kissa), (1,koira), (1,marsu),
(2,kissa), (2,koira), (2,marsu),
(3,kissa), (3,koira), (3,marsu) }

Arvojoukkoihin X ja Z perustuvia relaatioita ovat esimerkiksi

XZ1 = { (0,kissa), (1,koira) } ja
XZ2 = { (1,marsu), (2,kissa), (3,kissa) } ja
XZ3 = { } = tyhjä joukko 

Tehtävä (linkki tehtävään)

 Alkuun

Relaatiokaavio, relaatiokaavion ilmentymä, attribuutti

Jokaiseen relaatioon liittyy jokin tulkinta monikoissa olevien arvojen tarkoitukselle. Tietyssä paikassa olevalla arvolla on tietty merkitys. Esimerkiksi relaation

XZ1 = { (0,kissa), (1,koira) }

2-paikkaisissa monikoissa ensimmäinen alkio voisi ilmaista eläimen tunnuksen ja jälkimmäinen eläimen lajin jolloin relaation monikko esittäisi eläimen olemassaoloa.

Jos kaksi relaatiota perustuu samoihin arvojoukkoihin ja niihin liittyvät arvojen tulkinnat ovat samat, on kyseessä saman relaatiokaavion (relation schema) kaksi ilmentymää (instance), esimerkiksi XZ1 ja XZ2 ovat saman relaatiokaavion ilmentymiä. Relaatiokaavio puolestaan on ilmentymiensä määrittely ja ilmentymät ovat määrittelynsä mukaisia.

Relaatiokaaviolle annetaan sen ilmentymien tarkoitusta kuvaava nimi, esimerkiksi ilmentymät XZ1 ja XZ2 voisivat olla kaavion 'Eläin' ilmentymiä. Alkioiden paikoille relaation monikoissa (ensimmäinen, toinen, jne) annetaan paikassa olevan alkion merkitystä kuvastava nimi. Siten kaavion 'Eläin' kohdalla voitaisiin monikoiden ensimmäistä alkiota kutsua eläintunnukseksi ja toista lajiksi. Alkion paikalle annettua nimeä kutsutaan attribuutiksi. Kaavio voidaan nyt esittää yksinkertaisessa muodossa

Eläin(eläintunnus, laji)

eli määritellään 2-paikkaisia relaatioita, joiden monikoissa ensimmäisessä paikassa on eläintunnus ja jälkimmäisessä laji. Täydellisemmässä kaavioesityksessä

Eläin(eläintunnus:X, laji:Z)

on mukaan otettu arvojoukot kertomaan, että eläintunnus-arvo otetaan arvojoukosta X ja laji-arvo arvojoukosta Y.

Kaavio voidaan esittää myös kuvana

Relaatiokaavioon liittyvät arvojoukot tulisi valita sellaisiksi, että niiden arvot kattavat kaikki mahdolliset reaalimaailman tilanteet, joita relaatiokaavion ilmentymien pitäisi kyetä esittämään. Yllä arvojoukkoon X pitäisi kuulua kaikki mahdolliset eläintunnukseksi kelpaavat arvot ja arvojoukoon Z kaikki mahdolliset lajinimet.

 Alkuun

Havaintoesitys

Relaatio voidaan esittää havainnollisesti taulukkona, esimerkiksi kaavion Eläin(eläintunnus, laji) ilmentymänä relaatio XZ2 = { (1,marsu), (2,kissa), (3,kissa) } esitettäisiin muodossa:


 Alkuun

Avain ja pääavain

Koska relaatio on matemaattinen joukko, ovat kaikki relaation monikot keskenään erilaisia. Monikot kyetään erottamaan toisistaan eli yksilöimään sisältönsä perusteella. Erotteluun ei välttämättä tarvita kaikkia monikon arvoja. Esimerkiksi seuraavassa relaatiossa riittää monikoiden (rivien) yksilöintiin eläintunnus-paikassa (sarakkeessa) oleva arvo.


Avain

muodostuu niistä monikkojen paikoista, joissa olevien arvojen avulla relaation monikot voidaan yksilöidä missä tahansa kyseisen relaatiokaavion ilmentymässä eikä yksilöinti ole mahdollista jättämällä jokin paikoista pois

Kun määritellään attribuutin 'eläintunnus' nimeämä paikka kaavion Eläin mukaisten relaatioiden avaimeksi asetetaan kaavion Eläin ilmentymille sääntö:

Aina ei ole löydettävissä vain yhtä paikkaa, jossa oleva arvo riittäisi yksilöintiin vaan tarvitaan useammassa paikassa olevia arvoja. Seuraavassa relaatiossa kuvataan eläinten nauttimia ruoka-aineita.

Relaatiosta ei löydy yhtä paikkaa (saraketta), jonka arvojen perusteella rivit olisi yksilöitävissä. Tämän ilmentymän perusteella paikat

Yksilöivätkö nämä yhdistelmät relaation monikot kaikissa Ruokailu -ilmentymissä?

Tässä tapauksessa ainoa todellisuutta heijastava avainmääritys  on yhdistelmä

eläintunnus, päivä, ruokalaji,

joka tarkoittaa sitä, että tietystä ruokalajista tehdään kullekin eläimelle vain yksi kirjaus päivää kohden. Tämän relaatiokaavion kohdalta on syytä  todeta, että tätä ei voi käyttää kirjaamaan jokaista erillistä syöntikertaa. Eläinhän voisi syödä kahdella erillisellä syöntikerralla saman määrän samaa ruokalajia ja tällöin relaatioon tulisi kaksi samanlaista riviä, mikä ei määritelmän mukaan ole mahdollista. Jos erilliset syöntikerrat halutaan kirjata, täytyy relaatiokaavioon ottaa lisätietona mukaan vaikkapa kellonaika ja ottaa se myös avaimeen.

Tyhjäarvo

Tyhjäarvo (null) on erikoisarvo, jota käytetään kun

Avaimeen kuuluviksi määritellyissä paikoissa ei voi olla tyhjäarvoja.

Tarkastellaan relaatiokaaviota

Henkilö(Nimi, Osoite, Kännykkänumero, ...)

Nimi ei yksinään riitä yksilöintiin. Kännykkänumero, olettaen, että kännykät ovat henkilökohtaisia, riittäisi, mutta kaikilla ei ole kännykkää, joten kännykkänumeroa ei voi käyttää edes avaimen osana. Nimi ja osoite yhdistelmä saattaisi riittää yksilöintiin, jos osoitteet ovat riittävän tarkkoja ja kaikki osoitteet tiedetään. Henkilötunnus tietenkin riittäisi yksilöintiin, jos henkilöiden joukossa ei ole ulkomaalaisia, joilta puuttuu tunnus, ja henkilötunnuksen ottamiselle relaatioon ei ole muita esteitä kuten tietosuoja. Käytännössä tällaisessa tilanteessa turvaudutaan usein keinotekoiseen automaatisesti tuotettuun avaimeen (surrogate, keinoavain), joka tässä tapauksessa olisi vaikkapa henkilönumero.

Pääavain (primary key)

Usein on mahdollista löytää monta sellaista paikkayhdistelmää, joissa olevia arvoja voisi käyttää relaation monikoiden yksilöintiin.  Näiden mahdollisten avainten joukosta on valittava yksi erityisasemaan pääavaimeksi eli ensisijaiseksi tavaksi viitata relaatiokaavion ilmentymien monikoihin.

Pääavaimen merkitseminen relaatiokaavioon

Pääavain merkitään relaatiokaavioon alleviivaamalla kaikki pääavaimeen kuuluvat attribuutit:

Ruokailu( eläintunnus, päivä, ruokalaji, määrä)


 Alkuun

Viiteavain ja viite-eheys

Relaatiotietokanta muodostuu useasta relaatiosta. Nämä eivät ole toisistaan riippumattomia vaan relaation monikoiden välillä on kytkentöjä. Monikot kytketään toisiinsa sisällyttämällä yhteen monikkoon viittaus (reference) toiseen monikkoon. Relaation monikoilla ei ole järjestysnumeroa tai muuta ulkoista tunnistetta. Niinpä viittaukset täytyy tehdä monikon sisältöön perustuvaa yksilöintitietoa eli pääavainta käyttäen.

Viiteavain (foreign key)

Viiteavaimen muodostavat ne relaatiokaavion mukaisten monikkojen paikat (sarakkeet), joita käytetään viittauksen esittämiseen

Viiteavaimeen kuuluu yhtä monta paikkaa kun on viitatun kohteen avaimessa.

Samaan monikkoon voi kohdistua useita viittauksia.

Monikko voi sisältää useita viittauksia. Yhdessä arvopaikassa voi kuitenkin olla vain yksi arvo. Yllä olevan kuvan Ruokailu-relaatiossa on kaksi viiteavainta. Eläintunnus viittaa Eläin-monikkoon ja ruokalaji viittaa Ruokalaji-monikkoon.

Tällä kurssilla viiteavain esitetään relaatiokaaviossa siten, että viiteavaimena käytettävän attribuutin perään liitetään nuoli ja viitatun relaatiokaavion nimi. Kuvaesityksessä viiteavain-attribuutista  piirretään nuoli viitattuun kaavioon.

Esimerkki:

Eläin( eläintunnus, laji)
Ruokalaji( lajitunnus, energia)
Ruokailu( eläintunnus->Eläin, päivä, ruokalaji ->Ruokalaji, määrä)

Viittauksessa tulisi aina käyttää kohteena olevan kaavion pääavainta. Kuvassa nuoli lähtee siitä paikasta (attribuutista), joka toimii viiteavaimena, mutta kärjen ei tarvitse osua kohteen pääavaimeen.

Jos viittauksen kohteen pääavain on monipaikkainen, tarvitaan myös viiteavaimeen useita paikkoja. Monipaikkainen viittaus Kirjaus-monikoista Ruokailu-monikoihin esitetään seuraavasti

Kirjaus( kirjausnro, (eläintunnus, päivä, ruokalaji) ->Ruokailu, päivittäjä, ...)



Viittaus voi kohdistua myös monikkoon, joka on samassa relaatiossa kuin viittaava monikko. Esimerkiksi

Kaaviossa tämä esitetään

Eläin2( eläintunnus, emo ->Eläin2, laji )

 Alkuun


Harri Laine:Tietokantojen perusteet, Helsingin yliopisto, Tietojenkäsittelytieteen laitos, 2005