Tietokanta

Wikipedia
Loikkaa: valikkoon, hakuun

Tietokanta on tietotekniikassa käytetty termi tietovarastolle. Se on kokoelma tietoja, joilla on yhteys toisiinsa. Tietokannan ei välttämättä tarvitse olla sähköisessä muodossa, vaan sellaista voidaan pitää esimerkiksi kynällä ja paperilla. Kalenterikin on tietokanta.

Tietokanta saattaa edustaa jotain selvästi rajattua kohdetta reaalimaailmasta. Tällainen kohde voi olla esimerkiksi yrityksen keräämät tiedot asiakkaistaan.

Tietokantojen koot voivat vaihdella suuresti, yhteen tiedostoon tallennetuista taulukoista hyvin suuriin tietokantoihin joissa on useita miljoonia tietueita lukuisista kiintolevyistä koostuvilla levypakoilla. Tietokantaan voidaan tallentaa eri formaateissa olevaa tietoa, esimerkiksi tekstiä, ääntä ja videokuvaa.

Tietotekniikassa tietokannat esitetään taulukkorakenteella. Tiedot esitetään taulussa. Jokaisella sarakkeella on aina jokin tietotyyppi joka kertoo millaista tietoa kyseiseen sarakkeeseen voi tallentaa. lisäksi voidaan määritellä voiko sarakkeen solu olla tyhjä (NULL).

Esimerkki yksinkertaisesta taulukkorakenteisesta tietokannasta.

ID Nimi Sukunimi Ikä
1 Pekka Pekkanen 45
2 Tieto Kantanen 23
3 Mauri Makkonen 68

Relaatiotietokannat[muokkaa | muokkaa wikitekstiä]

Relaatiotietokannoissa (eng. relation, suhde) taulujen välille luodaan yhteyksiä. Taulujen tiedot yhdistetään toisiinsa toisen taulun avaimella. Yleisimmin ID:llä. Toisessa taulussa yhteyden luovaa saraketta kutsutaan vierasavaimeksi (eng. Foreign Key (FK)).

Taulujen välisiä suhteita kuvataan usein Äiti-lapsi -termillä. Termin mukaisesti äidillä voi olla useita lapsia, mutta lapsilla ei useita äitejä (suhde 1:n). Esimerkiksi viestillä voi olla vain yksi kirjoittaja (käyttäjä), mutta käyttäjällä useita kirjoituksia. Tällaisessa tapauksessa kirjoittaja/käyttäjä on tietokannallisesti viestin äiti ja kirjoitukset ovat kirjoittajan lapsia.

Yhdistettyjen taulujen tietojen käsittelyä hallitaan viite-eheyksillä. Viite-eheydet määrittävät mitä yhdistetyille tiedoille tapahtuu jos taulujen tiedot vaihtuvat tai ne poistetaan. Viite-eheyksillä voidaan siis määrittää esimerkiksi poistuvatko lapsitiedot jos äititieto poistetaan (Poistuvatko viestit jos niiden kirjoittaja poistetaan tietokannasta.).

Tietokantojen historiaa[muokkaa | muokkaa wikitekstiä]

Ensimmäiset nykyisten tietokantojen edeltäjät kehitettiin 1960-luvulla. Alan pioneeri oli Charles Bachman.

Relaatiotietokantamallin ja käsittelyteorian kehitti Edgar F. Codd vuonna 1970. Codd työskenteli IBM:n tutkimuslaboratoriossa ja hän johti ensimmäisten relaatiotietokantojen testiversioiden kehitystyötä. Vuosina 1973-1976 IBM laboratoriossa kehitettiin relaatiotietokannan prototyyppiä nimeltä System R. IBM:n kaupallinen tietokantatuote DB2 julkaistiin 1982.

Tietokannat on käytännöllisintä luokitella tuetun ohjelmointimallin mukaan. Muutamat malleista ovat olleet laajalti käytössä jo jonkin aikaa. Hierarkkinen malli toteutettiin ensimmäisenä, sen jälkeen verkkomalli, sitten relaatiomalli ohitti ne niin kutsutun "Flat-File"-mallin kanssa, joka oli helppo toteuttaa vaatimattomiinkin alustoihin. Hierarkkinen, verkko ja Flat-tiedostomalli eivät perustu vahvaan teoreettiseen pohjaan niin kuin relaatiomalli, vaan ne ovat syntyneet laitteiston ja ohjelmointiteknisten rajoitteiden vaikutuksesta.

Olio-ohjelmoinnin yleistyttyä myös tietokantoja on kehitetty vastaamaan oliomallin asettamiin tarpeisiin. On kehitetty puhtaita oliotietokantoja sekä perinteisiin relaatiokantoihin on lisätty olio-ohjelmointia tukevia ominaisuuksia. Jälkimmäisistä käytetään nimeä olio-relaatiotietokannat.

Tietokannan rakentaminen[muokkaa | muokkaa wikitekstiä]

Tietokannan rakentaminen perustuu siihen tallennettavan tiedon mallintamiseen. Tiedon mallintaminen perustuu sen ja sen kuvaaman todellisuuden analyysiin, jonka tuloksena saadaan joukko entiteettejä, niiden välisiä yhteyksiä ja niiden ominaisuuksia. Nämä esitetään yleensä jonkin kuvauskielen tai tekniikan avulla. Yksi yleinen kuvauskieli on UML. Seuraavassa vaiheessa malli kuvataan jonkin reaalisen tietokantatekniikan edellyttämässä muodossa. Yksi yleinen tietokantatekniikka on relaatiotietokanta, joka perustuu relaatiotietomalliin.

Tietomalli on siis malli tiedosta, ei todellisuudesta, jota se mallintaa vain epäsuorasti. BIM (Building Information Modelling, Rakennuksen tietomalli) on vastaavasti rakentamisen käytännön toteutus tietomallista, joka perustuu aina tietokantaan.

Tietokantojen rakentamisen lisäksi tietokoneohjelmien rakentamisen yhteydessä tehdään tietomalli niistä tiedoista, joita ohjelmalla käsitellään. Tietomallia voidaan tarvita myös esimerkiksi kommunikaatioprotokollien rakentamisessa. Tietokannat voivat nykyisin tallentaa myös binääridataa. Tällöin tietomallia suunniteltaessa arvioidaan, onko tietueisiin liittyviä dataobjekteja kuten kuvia järkevintä käsitellä erillisinä tiedostojärjestelmään tallennettuina tiedostoina vai tietokantaan tallennettuina binääritietueina (tietotyypit BLOB ja CLOB).

Jos ollaan rakentamassa relaatiotietokantaa, jota hallitaan SQL-kielen avulla, niin viime vaiheessa tietomallissa kuvatut entiteetit luodaan tietokantaan tauluina käyttäen SQL-kielen määrittelylauseita (käytännössä CREATE-lause). Yksinkertaisimmissa tietomalleissa entiteetin sisältämät tietueet ja tietotyypit voivat sellaisinaan vastata tietokannan taulurakennetta. Tietokantajärjestelmät mahdollistavat myös monimutkaisemman toimintalogiikan toteuttamisen jopa niin, että tietokantamoottori voi SQL-kielisten kyselyiden lisäksi ajaa yleisemmillä ohjelmointikielillä toteutettuja tallennettuja proseduureja. Tämä lähestymistapa on hyödyllinen erityisesti tilanteissa, joissa asiakaspäässä on käytössä rajalliset resurssit SQL-kyselyn palauttaman datan tulkitsemiseen jolloin tulkintaa ja muuta käyttötapaukseen liittyvää logiikkaa voidaan toteuttaa palvelinpäässä.

Tietokannan hallintajärjestelmä[muokkaa | muokkaa wikitekstiä]

Kaupallisesti myytävät tietokantatuotteet ovat useimmiten tietokannan hallintajärjestelmiä (DBMS, Database Management System). Tietokannan hallintajärjestelmä on kokoelma varusohjelmistoja, joiden tehtävänä on tukea varsinaista tietokantamoottoria (database engine) mm. optimoimalla kyselyjä käyttäen hyväksi tallennettua hakutilastoa (statistics) ja indeksejä. Tietokannan hallintajärjestelmät sisältävät myös ylläpitoa helpottavia apuohjelmia joiden avulla tietokantamoottorin säilyttämä tieto voidaan varmuuskopioida ja palauttaa sekä viedä ja tuoda muihin järjestelmiin. Varusohjelmat mahdollistavat tietokantojen klusteroinnin sekä toisintamisen kun haetaan korkeampaa käytettävyyttä ja saatavuutta. Hallintajärjestelmät sisältävät nykyisin myös rakenteisten dokumenttimuotojen tuen sekä teksti-indeksoinnin laajojen tietomäärien käsittelemiseksi. Hallintajärjestelmä helpottaa ylläpitäjän työtä myös tarjoamalla yhden käyttöliittymän jonka kautta tietokantamoottorien tilaa, ominaisuuksia ja parametrejä voidaan helposti hallita. Käytännössä kuitenkin tietokantojen ylläpitäjät yhä työskentelevät mieluummin komentorivipohjaisen konsolin kautta.

Tietokannat käytännössä[muokkaa | muokkaa wikitekstiä]

Tietokantoja käytetään monissa sovelluksissa liki jokaisella sovellusalueella. Tietokannat suositellaan suurien monen käyttäjän järjestelmien tiedon tallennusmekanismiksi silloin kun tarvitaan koordinaatiota usean käyttäjän välillä. Jopa yksittäiselle käyttäjälle tietokanta voi olla sopiva ratkaisu, ja monet sähköpostiohjelmat ja kalenterisovellukset perustuvat standardinmukaiseen tietokantateknologiaan.

Relaatiotietokantajärjestelmiä[muokkaa | muokkaa wikitekstiä]

Oliotietokantajärjestelmiä[muokkaa | muokkaa wikitekstiä]

Transaktiot ja samanaikaisuus[muokkaa | muokkaa wikitekstiä]

Pääartikkeli: ACID

Lisänä useimmat käytännön tietokannat pyrkivät toteuttamaan transaktiomallin, jolla on halutut tiedon oikeellisuuden säilytysominaisuudet. Ihannetapauksessa tietokantaohjelmisto noudattaa ACID-sääntöjä:

  • Atomisuus (Atomicity) - kaikki tai ei mitään. Jokainen operaatio pitää suorittaa tai sitten mitään niistä ei suoriteta. (Transaktiot joita ei pystytä viemään loppuun täytyy peruuttaa kokonaisuudessaan.)
  • Johdonmukaisuus (Consistency) - jokaisen transaktion jäljiltä tietokannan tulee olla johdonmukaisessa tilassa.
  • Eristys (Isolation) - transaktiot eivät saa vaikuttaa toisiinsa ja keskeneräinen suoritus ei saa näkyä muille transaktioille.
  • Kestävyys (Durability) - onnistuneiden transaktioiden pitää säilyä mahdollisen kaatumisenkin jälkeen.

Käytännön toteutuksissa useimmat tietokantajärjestelmät joustavat joidenkin näiden sääntöjen noudattamisessa paremman suorituskyvyn saavuttaakseen.

Samanaikaisuuden hallinta on menetelmä, jolla varmistetaan että transaktiot ajetaan turvallisella tavalla ACID-sääntöjä noudattaen. Tietokantajärjestelmän pitää pystyä varmistamaan että vain sarjallistettavat, palautettavat operaatiot ovat sallittuja ja että mitään toimintoja toteutetuista transaktioista ei menetetä silloin kun palautetaan kanta tilaan ennen peruutettua transaktiota.

Tietokannan oikeudellinen suoja[muokkaa | muokkaa wikitekstiä]

Tekijänoikeuslaissa erilaisille tietokannoille on myönnetty määräaikainen oikeussuoja. Lain tietokanta-käsite on toinen kuin tekniikan: lain suoja tietokannalle kattaa lähinnä tietokannan sisältämän informaation eikä niinkään esimerkiksi taulurakennetta. Suojatun tietokannan ei tarvitse olla edes sähköinen vaan se voi olla esimerkiksi kortisto. Oikeudellisen suojan edellytyksenä on merkittävä panostus tietokannan luomiseen tai järjestämiseen.

Tietokantaan liittyviä käsitteitä[muokkaa | muokkaa wikitekstiä]