Tietokanta

Tietokanta on järjestetty tietokoneen tallentama tietojen ja informaation kooste. Ne ovat määrättyä tarkoitusta varten koottuja tiedostokokoelmia, joista hakumenetelmillä saadaan yksittäinen tieto tai tietoyhdistelmiä ja jota voidaan korjailla tai täydentää (päivitys). Yleisimmät tietokantaohjelmistot (nk. relaatiotietokannat) perustuvat ns. relaatiomalliin. Relaatiomallin vaihtoehtona tietokannat voivat perustua muun muassa oliomalliin tai graafimalliin.

Tietokantojen historiaa

Vuonna 1959 perustettu CODASYL-komitea määritteli tietokannan hallintajärjestelmiä, joiden ensimmäinen määrittely julkaistiin vuonna 1969.
Modernien tietokantojen edeltäjiä kehitettiin 1960-luvulla. 
Hierarkkinen malli toteutettiin ensimmäisenä, sen jälkeen verkkomalli ja sen jälkeen relaatiomalli.
Alan pioneeri oli Charles Bachman. Bachmanin artikkeli The Programmer as Navigator julkaistiin vuonna 1973 Communications of the ACM -lehdessä. Artikkeli johti niin sanotun navigaatiomallin kehittämiseen, joka liitetään usein hierarkisen ja verkkomallin tietokantoihin.
Tietokantojen relaatiomallin ja käsittelyteorian kehitti Edgar F. Codd, jonka artikkeli A Relational Model of Data for Large Shared Data Banks julkaistiin vuonna 1970 Communications of the ACM -lehdessä. 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.
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.
NoSQL-tietokannaksi kutsuttiin aluksi Carlo Strozzin vuonna 1998 esittämää järjestelmää, jossa ei käytetty SQL-kyselykieltä. Termi yleistyi vuonna 2009 Johan Oskarssonin järjestämässä tapaamisessa, jossa keskusteltiin ei-relaatiomallin mukaisista ohjelmistoista kuten Cassandra ja Voldemort.
NoSQL-tietokantoja ovat avain-arvo -tietokannat, sarakkeiset tietokannat, dokumentti-orientoituneet tietokannat ja graafitietokannat. XML tietokanta on dokumentti-orientoituneen tietokannan tyyppi.
NewSQL on tietokantaluokka, joka pyrkii yhdistämään ACID-ominaisuudet NoSQL-tietokantojen skaalautuvuuteen.
Hajautettu tietokanta on tietokanta, joka ei ole kokonaisuudessaan tallennettu yhdessä paikassa vaan tietokoneverkon kautta toisiinsa liitetyillä tietokoneilla.

Hierarkinen tietokanta

Varhaisin tietokantamalli on hierarkinen malli. Hierarkinen malli johti verkkomallin kehitykseen.
Hierarkisessa tietokannassa tieto järjestetään ylösalaisin käännettyyn puurakenteeseen. Rakenteessa tiedoilla on isäntä-lapsi -suhde kuten hierarkisessa tiedostojärjestelmässä: isännällä voi olla useita lapsia mutta lapsella voi olla vain yksi isäntä.
Tämä eroaa relaatiotietokannasta, jossa rakenne voidaan vapaasti määrittää.
Hierarkinen malli oli parannusta toisiinsa liittymättömien tiedostojen käsittelystä ja se esitti hyvin yksi-moneen -suhteita, mutta sillä oli ongelmia monta-moneen -suhteiden esittämisessä. Uusien riippuvaisuussuhteiden lisääminen vaatii laajaa rakenteen muokkaamista, joka johtaa sovelluksien muuttamiseen myös.
IBM:n Information Management System (IMS) perustuu hierarkiseen malliin: järjestelmää on edelleen käytetty vuonna 2013 IBM System Z -alustalla.
Hierarkiseen malliin perustuviin järjestelmiin kuuluvat DNS-nimipalvelu ja LDAP-hakemistopalvelut.

Verkkomallin tietokanta

Verkkomallin tietokanta suunniteltiin korjaamaan hierarkisen mallin ongelmia, etenkin sen joustamattomuuden. Mallissa on ongelmia kuten vaikeampi toteutus ja ylläpito. Verkkomalli johti relaatiomallin kehittämiseen, jota alkuun pidettiin epäkäytännöllisenä.
Verkkomalli esittää tiedot tietuiden puurakenteena. Riippuvuudet tietuiden välillä esitetään joukkoina, joilla on isäntä (omistaja verkkomallissa) ja lapsia (jäseniä verkkomallissa). Tietueiden liitokset esitetään osoittimina eikä toistettuina sarakkeina kuten relaatiomallissa.
Verkkomalli lisäsi mahdollisuuden useammalle omistajalle ja sitä myötä monta-moneen -suhteiden esityksen.
Charles Bachmanin General Electricille kehittämä Integrated Data Store (IDS) perustui verkkomalliin ja vaikutti myös CODASYLin toimintaan.

Oliotietokannat

Oliomalliin perustuvat tietokannat ilmeistyivät ensi kertaa 1980-luvulla CAD-sovelluksien tarpeisiin. Toisin kuin relaatiomallissa, oliomalli ei linkitä rivejä ja sarakkeita. Oliomallin mukaisessa tietokannassa ei myöskään käytetä kiinteää skeemaa. Monimutkaisen tiedon hakeminen voi olla myös nopeampaa seuraamalla suoraan osoittimia.
Oliotietokantojen tuki kyselykielille kuten SQL on vähäisempää ja käyttö painottuu enemmän olio-ohjelmointikieliin.

Tietokannan rakentaminen

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ä.

Tietokannat käytännössä

Tietokantoja käytetään monissa sovelluksissa liki jokaisella sovellusalueella. Tietokantaa 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.

Tietokannan oikeudellinen suoja

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.