Relaatiotietokantojen peruskäsitteet

Aloitetaan tutustuminen relaatiotietokantojen peruskäsitteisiin. Luodaan ensimmäiseksi pieni esimerkkitietokanta. Työntekijärekisteriin halutaan tallentaa yrityksen työntekijöiden etunimi, sukunimi ja työntekijänumero. Näitä kolmea tallennettavaa tietoa kutsutaan kentiksi (engl. field). Kenttä on pienin osanen, josta alkaa rakentua varsinainen tietokantamme.

Etunimi

Tommi

Kaikki tarvitsemamme kentät muodostavat yhdessä yhden rivin eli tietueen (record).

TyontekijaID

Etunimi

Sukunimi

1
Tommi
Lahtonen

Monta tietuetta taasen muodostavat yhden taulun (table).

Tyontekija

TyontekijaID

Etunimi

Sukunimi

1
Tommi
Lahtonen
2
Matti
Meikäläinen
3
Maija
Meikäläinen
4
Kalle
Kehveli

Kentät

Kenttiä luotaessa niille määritellään yleensä seuraavanlaisia ominaisuuksia:

Kentän nimeksi kannattaa valita jokin selkeä ja kuvaava nimi. Nimessä kannattaa kuitenkin välttää välilyöntejä, erikoismerkkejä ja skandinaavisia kirjaimia (å,ä,ö).

Tietotyypit ja niiden nimet vaihtelevat hieman eri tietokantaohjelmistojen välillä. Eri tyypeistä kerrotaan tarkemmin kirjan SQL-osuuden yhteydessä.

Kentän maksimipituutta määriteltäessä pitää olla erityisen tarkkana. Hyvin tyypillinen virhe on varata tilaa liian vähän esimerkiksi sukunimien tallentamiseen. Lähes aina kannattaa siis varata mieluummin liian paljon tilaa kuin liian vähän. Kaikkihan tietävät kuinka ärsyttäviä ovat paperilomakkeet, joiden allekirjoituskenttään ei mahdu kirjoittamaan omaa nimeään. Tietokoneella vastaavassa tilanteessa ei voi edes yrittää kaventaa käsialaansa.

Tietokantaa suunnitellessa tulee päättää, valitaanko kiinteämittainen vai vaihtuvamittainen kenttä. Kiinteämittaisessa kentässä varataan aina saman verran tilaa riippumatta siitä, kuinka paljon siihen tallennettava tieto oikeasti tarvitsee. Vaihtuvamittaisessa taas tilanvaraus muuttuu tarpeen mukaan kuitenkaan ylittämättä määriteltyä maksimipituutta. Kiinteämittainen kenttä on tietokantaohjelmiston kannalta helpompi ja kevyempi vaihtoehto mutta sen huonona puolena saattaa olla tilahukka. Kiinteän kentän pohjalta ohjelmiston on helpompi varata tarvitsemansa muisti- ja levytila sekä laskea eri tietueiden tai kenttien paikkoja muistissa. Toisaalta tietokanta suunnitellaan ihmisen ehdoilla ihmisen käytettäväksi. Tietokone ei hikoile, mutta käyttäjä kyllä osaa vääntää esiin tuskanhikeä, kun levytila täyttyy tai haluttu tieto ei mahdukaan sille varattuun kiinteään tilaan. Kenttäkohtaisesti on siis tarkkaan harkittava, ottaako käyttöön kiinteä- vai vaihtuvamittaisen kentän.

Oikeellisuustarkistuksien avulla voidaan määrätä numeerisille kentille sallittu arvoväli (esim. luvut yhdestä kymmeneen) tai jokin laskennallinen tarkistus (esim.> 100). Useimmissa ohjelmistoissa voidaan määritellä myös jonkinlainen syöttömalli. Oikeellisuustarkistuksien määrittely on aina hyvin tuotekohtaista.

Mahdollisimman moni kenttä kannattaa määritellä pakolliseksi tai käyttää oletusarvoa. Tällöin vältetään NULL-ongelmia. NULL on erityinen merkintätapa puuttuvalle arvolle. NULL ei tarkoita välilyöntiä tai nollaa. Jos kentälle ei syöttövaiheessa anneta mitään arvoa, niin sen sisällöksi tulee NULL. Se tarkoittaa lähinnä tuntematonta arvoa eli sen arvo voisi periaatteessa olla mikä tahansa tai ei mikään.

Taulut ja tietueet

Tietue koostuu yhdestä tai useammasta kentästä. Taulun yhtä riviä kutsutaan tietueeksi.

Taulu taas sisältää useampia tietueita tai ei yhtään tietuetta (tyhjä taulu). Tauluja nimettäessä on hyvä noudattaa samoja periaatteita kuin kenttien nimeämisessä. Vältetään siis välilyöntejä, erikoismerkkejä ja skandinaavisia kirjaimia (å,ä,ö).

Avaimet (keys)

Jokaiselle taululle pitää määritellä perusavain (engl. primary key), joka yksilöi kyseisen taulun sisältämät tietueet. Jokaisella suomalaisella on oma yksilöllinen henkilötunnuksensa. Vastaavasti täytyy jokaisella taulussa olevalla tietueella olla jokin kenttä tai kenttien yhdistelmä, jollaista ei ole yhdelläkään toisella samassa taulussa olevalla tietueella. Jokaisella tietueella pitää olla yksilöllinen l. uniikki (engl. unique) perusavaimen arvo eli kahta samaa perusavaimen arvoa ei taulussa saa olla.

Perusavain muodostetaan yhdestä tai useammasta taulun kentästä. Useammasta kuin yhdestä sarakkeesta muodostuvaa perusavainta kutsutaan yhdistetyksi avaimeksi (engl. composite key). Perusavain ei saa puuttua eli saada arvoa NULL.Tätä kutsutaan perusavaimen eheydeksi (engl. entity integrity).

Tietokannan hallintajärjestelmä pitää taulun järjestyksessä perusavaimen mukaan. Järjestetyn taulun käsitteleminen on huomattavasti tehokkaampaa kuin järjestämättömän. Toimintaa voi hyvin verrata tavallisen puhelinluettelon käyttämiseen: Puhelinluettelon sisältämät tiedot on järjestetty nimien mukaan eli nimi toimii hieman vastaavassa tarkoituksessa kuin perusavain toimisi tietokannassa. Tietyn ihmisen puhelinnumeron etsiminen puhelinluettelosta onnistuu hyvin näppärästi. Jos nimet olisivat puhelinluettelossa sattumanvaraisessa järjestyksessä, hakeminen olisi huomattavasti hankalampaa ja hitaampaa.

Tauluissa esiintyy myös muunlaisia avaimia kuin perusavaimia. Joitakin kenttiä määritetään toissijaisiksi avaimiksi (engl. secondary key, secondary index). Tietokanta pitää automaattisesti yllä järjestysindeksiä avainkentistä. Haettaessa taulun tiedot järjestettynä jonkin avainkentän mukaan tietokantaohjelma pystyy toteuttamaan haun tehokkaammin kuin, jos kyseessä olisi tavallinen kenttä. Toissijaisiksi avaimiksi määritellään juuri tällaisia kenttiä, joiden mukaan tietoja halutaan mahdollisesti järjestellä. Esimerkiksi sukunimi-kenttä voisi olla tällainen. Toissijaiset avaimet siis nopeuttavat taulusta haettavan tiedon järjestämistä. Toisaalta ne hieman hidastavat päivitys- ja poisto-operaatioita, koska näiden tapahtumien yhteydessä täytyy päivittää myös avainkenttiin liittyvät järjestysindeksitiedot.

Viite-eheys (Referential Integrity)

Taulun kentistä voidaan viitata jonkin toisen taulun perusavaimeen tai toissijaiseen avaimeen. Tällaista yhteyttä kutsutaan viite-eheydeksi (engl. referential integrity) ja kyseinen kenttä määritellään yleensä myös avaimeksi, jota kutsutaan viiteavaimeksi (engl. foreign key). Viite-eheys määrää, että jokaista viittaavassa taulussa (”lapsi”) esiintyvää viiteavaimen arvoa pitää vastata sama perusavaimen arvo viittauksen kohteena olevassa taulussa (”äiti”). Yritettäessä syöttää Työntekijä-tauluun (”lapsi”) arvoja, joita vastaavia ei ole Osasto-taulussa, viite-eheys pakottaa syöttämään jotain kelvollista ennen kuin syöttö voidaan hyväksyä. Sama tapahtuu, jos Projekti-taulun projektipäällikkö-kenttään yritetään syöttää arvoa jota ei löydy Työntekijä-taulun työntekijäID-kentästä. Viite-eheys ei kuitenkaan koske NULL-arvoja, joten yleensä on syytä kieltää NULL-arvojen esiintyminen kyseisessä lapsi-taulun kentässä.

Graphic1

Kuva 1 Viite-eheydet

Seuraavissa taulukoissa näkyy edellisessä kuvassa määriteltyjen viite-eheyksien mukaisen tietokannan esimerkkisisältöä.

Osasto

OsastoID

Osastonimi

0
Markkinointi
1
Tuotanto
2
Dokumentointi

Työntekijä

TyöntekijaID

Etunimi

Sukunimi

Osasto

1
Tommi
Lahtonen
1
2
Matti
Meikäläinen
0
3
Maija
Meikäläinen
0
4
Kalle
Kehveli
2

Projekti

ProjektiID

ProjektiNimi

Projektipäällikkö

0
WWW-sovellus
1
1
Tietokantaprojekti
1

”Äiti”-taulussa olevia arvoja voidaan kuitenkin yrittää muuttaa tai poistaa. Jos muuttaminen tai poistaminen on aiheuttamassa viite-eheyden rikkoutumisen, on olemassa kolme perusperiaatetta joiden mukaan muutoksia voidaan tehdä. Nämä periaatteet ovat seuraavat:

Esimerkkitietokannassa on kaikissa viite-eheyksissä voimassa johdannaismuutos. Muutetaan Tuotanto-osaston TuotantoID:ksi 10. Viite-eheyden määritysten mukaan kaikki Työntekijä-taulussa olevat kentät, joissa on viitattu kyseiseen Osasto-taulun tietueeseen, päivittyvät myös.

Osasto

OsastoID

Osastonimi

0
Markkinointi
10
Tuotanto
2
Dokumentointi

Työntekijä

TyöntekijaID

Etunimi

Sukunimi

Osasto

1
Tommi
Lahtonen
10
2
Matti
Meikäläinen
0
3
Maija
Meikäläinen
0
4
Kalle
Kehveli
2

Samoin jos muutamme TyöntekijäID-kentän arvon 1 arvoksi 15, muuttuvat vastaavat numerot Projekti-taulun Projektipäällikkö-kentässä.

Työntekijä

TyöntekijaID

Etunimi

Sukunimi

Osasto

15
Tommi
Lahtonen
10
2
Matti
Meikäläinen
0
3
Maija
Meikäläinen
0
4
Kalle
Kehveli
2

Projekti

ProjektiID

ProjektiNimi

Projektipäällikkö

0
WWW-sovellus
15
1
Tietokantaprojekti
15

Käyttäjien kommentit

Kommentoi tätä sivua Lisää uusi kommentti
Kurssimateriaalien käyttäminen kaupallisiin tarkoituksiin tai opetusmateriaalina ilman lupaa on ehdottomasti kielletty!
http://appro.mit.jyu.fi/doc/tiedonhallinta/tietokannat/index2.html
© Antti Ekonoja (anjoekon@jyu.fi) <http://users.jyu.fi/~anjoekon/>
Tommi Lahtonen (tommi.j.lahtonen@jyu.fi) <http://hazor.iki.fi/>
Jukka Mäntylä (jmantyla@iki.fi) <http://www.iki.fi/jmantyla/>
2004-11-05 15:18:26
Informaatioteknologia - Jyväskylän yliopiston IT-tiedekunta ja avoin yliopisto