Tietokanta
Tietokanta on tietokoneen tallentama tietojen ja informaation järjestetty kooste.[1] Tietokannat ovat tiettyä tarkoitusta varten koottuja tiedostokokoelmia, joista hakumenetelmillä saadaan yksittäinen tieto tai tietoyhdistelmiä ja joita voidaan korjailla tai täydentää (päivitys). Laajimmin käytetyt tietokantaohjelmistot (relaatiotietokannat) perustuvat relaatiomalliin.[2][3][4] Relaatiomallin vaihtoehtona tietokannat voivat perustua muun muassa oliomalliin tai graafimalliin.
Tietokantojen historiaa
[muokkaa | muokkaa wikitekstiä]Vuonna 1959 perustettu CODASYL-komitea määritteli tietokannan hallintajärjestelmiä, joiden ensimmäinen määrittely julkaistiin vuonna 1969.[5]
Modernien tietokantojen edeltäjiä kehitettiin 1960-luvulla. Hierarkkinen malli toteutettiin ensimmäisenä, sen jälkeen verkkomalli ja sen jälkeen relaatiomalli.
Alan uranuurtaja oli Charles Bachman. Bachmanin artikkeli "The Programmer as Navigator" julkaistiin vuonna 1973 Communications of the ACM -lehdessä.[6] Artikkeli johti navigaatiomallin kehittämiseen. Navigaatiomalli liitetään usein hierarkkisiin ja verkkomallin tietokantoihin.lähde?
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ä.[7][8] 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 1983.[9]
Bachmanin ja Coddin näkemyserot aikanaan olivat merkittäviä tietokantojen kehitykselle vaikka varsinaista päätöstä debatille ei syntynyt.[10]
Olio-ohjelmoinnin yleistyttyä myös tietokantoja on kehitetty vastaamaan oliomallin asettamiin tarpeisiin. On kehitetty puhtaita oliotietokantoja, minkä lisäksi perinteisiin relaatiokantoihin on lisätty olio-ohjelmointia tukevia ominaisuuksia. Jälkimmäisistä käytetään nimeä olio-relaatiotietokannat.[11]
NoSQL-tietokannaksi kutsuttiin aluksi Carlo Strozzin vuonna 1998 esittämää järjestelmää, jossa ei käytetty SQL-kyselykieltä.[12] Termi yleistyi vuonna 2009 Johan Oskarssonin järjestämässä tapaamisessa, jossa keskustelun aiheena olivat ei-relaatiomallin mukaiset ohjelmistot, kuten Cassandra ja Voldemort. Relaatiomallin mukaiset tietokannat ovat suunniteltuja varmistamaan tietojen eheys, mutta NoSQL:ssä toisinaan tähdätään myöhempään eheyteen eikä välttämättä välittömään eheyteen. Relaatiomallin mukaiset tietokannat pyrkivät normalisoidun tiedon tallentamiseen, josta toistuvat tiedot on poistettu jotta tallennettavan tiedon määrä on pieni. NoSQL sallii osittain rakenteellista tai täysin rakenteetonta tietoa, jonka käsittely voi olla hitaampaa.[12]
NoSQL-tietokantoja ovat avain-arvotietokannat, sarakkeiset tietokannat, dokumentti-orientoituneet tietokannat ja graafitietokannat.[12] XML-tietokanta on dokumenttiorientoituneen tietokannan tyyppi.[13] XML on hierarkinen malli eikä tiedon suhteiden kuvaus; XML on itseään kuvaava kun taas relaatiomalli ei ole; ja XML:ssä tiedolla on tietty järjestys tallennettaessa kun taas relaatiomallissa tiedoilla ei ole järjestystä ellei sitä määrätä kyselyssä.[14]
NewSQL on tietokantaluokka, joka pyrkii yhdistämään ACID-ominaisuudet NoSQL-tietokantojen skaalautuvuuteen.[15]
Hajautettu tietokanta on tietokanta, joka ei ole kokonaisuudessaan tallennettuna yhdessä paikassa vaan tietokoneverkon kautta toisiinsa yhdistetyillä tietokoneilla.[16]
Tietokantojen kehityshistoriassa on todettu useita "liikehdintöjä" 1960-luvulta lähtien, mutta usein uusien sovelluksien kehitys palaa relaatiomallin mukaiseksi ja muut suuntaukset jäävät vähemmälle osuudelle.[17]
Hierarkkinen tietokanta
[muokkaa | muokkaa wikitekstiä]Varhaisin tietokantamalli on hierarkkinen malli.[18] Hierarkkinen malli johti verkkomallin kehitykseen.[18]
Hierarkkisessa tietokannassa tieto järjestetään ylösalaisin käännettyyn puurakenteeseen.[18][19] Rakenteessa tiedoilla on isäntä–lapsi-suhde, kuten hierarkkisessa tiedostojärjestelmässä: isännällä voi olla useita lapsia mutta lapsella voi olla vain yksi isäntä.[18] Tämä eroaa relaatiotietokannasta, jossa rakenne voidaan vapaasti määrittää.[19]
Hierarkkinen malli oli parannusta toisiinsa liittymättömien tiedostojen käsittelystä. Hierarkkinen malli esittää hyvin yksi–moneen-suhteita, mutta sillä on ongelmia monta–moneen-suhteiden esittämisessä.[18] Uusien riippuvaisuussuhteiden lisääminen vaatii laajaa rakenteen muokkaamista, ja seurauksena on myös sovelluksien muuttaminen.[18]
IBM:n Information Management System (IMS) perustuu hierarkkiseen malliin: järjestelmää on edelleen käytetty vuonna 2013 IBM System Z -alustalla.[20] IMS perustuu Yhdysvaltain avaruusohjelman materiaalihankintojen hallintaan kehitettyyn järjestelmään.[21]
Hierarkkiseen malliin perustuviin järjestelmiin kuuluvat DNS-nimipalvelu ja LDAP-hakemistopalvelut.
Verkkomallin tietokanta
[muokkaa | muokkaa wikitekstiä]Verkkomallin tietokanta suunniteltiin korjaamaan hierarkkisen mallin ongelmia, etenkin sen joustamattomuutta.[22] Mallin ongelmia ovat esimerkiksi vaikeampi toteutus ja ylläpito.[22] Verkkomalli johti relaatiomallin kehittämiseen. Relaatiomallia pidettiin aluksi epäkäytännöllisenä.[23]
Verkkomallissa tiedot esitetään tietuiden puurakenteena.[24] Riippuvuudet tietuiden välillä esitetään joukkoina, joilla on isäntä (omistaja verkkomallissa) ja lapsia (jäseniä verkkomallissa).[22][24] Tietueiden liitokset esitetään osoittimina eikä toistettuina sarakkeina kuten relaatiomallissa.[24]
Verkkomalli lisäsi mahdollisuuden useammalle omistajalle ja siten monta–moneen-suhteiden esityksen.[22]
Charles Bachmanin General Electricille kehittämä Integrated Data Store (IDS) perustui verkkomalliin ja vaikutti myös CODASYLin toimintaan.[10]
Relaatiotietokannat
[muokkaa | muokkaa wikitekstiä]Tähän artikkeliin tai osioon ei ole merkitty lähteitä, joten tiedot kannattaa tarkistaa muista tietolähteistä. Voit auttaa Wikipediaa lisäämällä artikkeliin tarkistettavissa olevia lähteitä ja merkitsemällä ne ohjeen mukaan. |
- Pääartikkeli: Relaatiotietokanta
Relaatiotietokannat perustuvat predikaattilogiikkaan pohjautuvaan relaatiomalliin, jonka käsitteitä käyttäen tietokannan peruskäsitteet, kuten taulut, määritellään. Relaatiotietokannoissa (engl. relation, suom. suhde) taulujen välille luodaan yhteyksiä. Taulujen tiedot yhdistetään toisiinsa toisen taulun avaimella. Yleisimmin ID:llä. Toisessa taulussa yhteyden luovaa saraketta kutsutaan viiteavaimeksi tai vierasavaimeksi (engl. Foreign Key).
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ä, jotka 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.).
Esimerkki
[muokkaa | muokkaa wikitekstiä]Esimerkki yksinkertaisesta taulukkorakenteisesta tietokannasta, jossa on kaksi taulua:
|
|
Huomaa, että esimerkissä Henkilöt
-taulun Sukunimi_ID
on viittaus Sukunimet
-taulun riviin eikä tietoa siten toisteta, vaan kuvataan relaatiolla.
Oliotietokannat
[muokkaa | muokkaa wikitekstiä]Oliomalliin perustuvat tietokannat ilmeistyivät ensi kertaa 1980-luvulla CAD-sovelluksien tarpeisiin.[25] 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.lähde?
Oliotietokantojen tuki kyselykielille kuten SQL on vähäisempää ja käyttö painottuu enemmän olio-ohjelmointikieliin.[25]
Tietokannan rakentaminen
[muokkaa | muokkaa wikitekstiä]Tähän artikkeliin tai osioon ei ole merkitty lähteitä, joten tiedot kannattaa tarkistaa muista tietolähteistä. Voit auttaa Wikipediaa lisäämällä artikkeliin tarkistettavissa olevia lähteitä ja merkitsemällä ne ohjeen mukaan. |
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 rakennetaan relaatiotietokantaa, jota hallitaan SQL-kielen avulla, viime vaiheessa tietomallissa kuvatut entiteetit luodaan tietokantaan tauluina SQL-kielen määrittelylauseilla (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ä]- Pääartikkeli: Tietokannan hallintajärjestelmä
Tietokannan hallintajärjestelmä on ohjelmisto (yksi tai useampia ohjelmia), jonka tehtävänä on hakea, tallentaa ja järjestää tietokoneella olevia tietoja.[26]
Hallintajärjestelmä on toteutettu varusohjelmistona, jonka tehtävänä on tukea varsinaista tietokantamoottoria (engl. database engine) mm. optimoimalla kyselyjä käyttäen hyväksi tallennettua hakutilastoa (engl. 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.lähde?
Relaatiotietokantojen hallintajärjestelmistä käytetään lyhennettä RDBMS ja oliotietokantojen hallintajärjestelmistä lyhennettä ODBMS tai OODBMS.
- Katso myös: Tietokantasovellus
Tietokannat käytännössä
[muokkaa | muokkaa wikitekstiä]Tietokantoja käytetään monissa sovelluksissa liki jokaisella sovellusalueella. Tietokantaa suositellaan suurien monen käyttäjän järjestelmien tiedon tallennusmekanismiksi silloin, kun tarvitaan usean käyttäjän välistä koordinaatiota. Jopa yksittäiselle käyttäjälle tietokanta voi olla sopiva ratkaisu, ja monet sähköpostiohjelmat ja kalenterisovellukset perustuvat standardin mukaiseen tietokantateknologiaan.lähde?
Transaktiot ja samanaikaisuus
[muokkaa | muokkaa wikitekstiä]Tähän artikkeliin tai osioon ei ole merkitty lähteitä, joten tiedot kannattaa tarkistaa muista tietolähteistä. Voit auttaa Wikipediaa lisäämällä artikkeliin tarkistettavissa olevia lähteitä ja merkitsemällä ne ohjeen mukaan. |
- 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, on peruttava 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.
- Pysyvyys (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, jotta suorituskyky olisi parempi.
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.
Transaktioille tyypillisesti toteutetaan transaktioloki (transaktiohistoria), jolla voidaan palauttaa tietokanta aiempaan tilaan (engl. rollback) ja myös seuraavaan tilaan (engl. rollforward), esimerkiksi palautuksen jälkeen. Tästä syystä lokissa on toteutuksesta riippuen oltava varsinainen muutos ja muutosta edeltävä tieto, jotta palautus on mahdollista tehdä.
Kyselykielet
[muokkaa | muokkaa wikitekstiä]- Pääartikkeli: Kyselykieli
Tietokantojen hallintajärjestelmät tukevat erilaisia kyselykieliä, joita ovat:
- Structured Query Language (SQL)
- Object Query Language (OQL)
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.lähde?
Tietokantaan liittyviä käsitteitä
[muokkaa | muokkaa wikitekstiä]- Tietokantamoottori
- Tietokannan hallintajärjestelmä
- SQL-injektio
- Tietokannan normalisointi
- NoSQL
- Spatiaalinen tietokanta
Lähteet
[muokkaa | muokkaa wikitekstiä]- ↑ Database Encyclopaedia Britannica. Viitattu 20.10.2019. (englanniksi)
- ↑ Rantala Risto, päätoimittaja: ”Tietokanta”, Otavan tietosanakirja. Helsinki: Otava, 1997. ISBN 951-1-15139-8
- ↑ ”Tietokanta”, CD-Facta 2005: suomenkielinen tietosanakirja. Helsinki: WSOY, 2004. ISBN 951-0-29148-X
- ↑ tietokanta Kielitoimiston sanakirja. Kotimaisten kielten keskus.
- ↑ The CODASYL Network Model remote-dba.net. Viitattu 20.10.2019. (englanniksi)
- ↑ Charles W. Bachman: The programmer as navigator dl.acm.org. 1973. doi:10.1145/355611.362534 (englanniksi)
- ↑ E. F. Codd: A Relational Model of Data for Large Shared Data Banks (PDF) kesäkuu 1970. Communications of the ACM. Viitattu 22.7.2019. (englanniksi)
- ↑ Edgar F. ("Ted") Codd ACM. Viitattu 22.7.2019. (englanniksi)
- ↑ Announcement Letter Number ZP83-0746 dated June 7, 1983 ibm.com. Viitattu 4.6.2023. (englanniksi)
- ↑ a b Charles William Bachman amturing.acm.org. Viitattu 10.1.2024. (englanniksi)
- ↑ Margaret Rouse: Object-Relational Database techopedia.com. Viitattu 23.10.2024. (englanniksi)
- ↑ a b c Mark Drake: A Comparison of NoSQL Database Management Systems and Models digitalocean.com. Arkistoitu Viitattu 20.10.2019. (englanniksi)
- ↑ The Forgotten Document-Oriented Database Management Systems: An Overview and Benchmark of Native XML DODBMSes in Comparison with JSON DODBMSes (PDF) hal.science. Viitattu 23.10.2024. (englanniksi)
- ↑ Comparison of the XML model and the relational model ibm.com. 15.2.2024. Viitattu 23.10.2024. (englanniksi)
- ↑ NewSQL….the new era of Relational Databases? agilelab.it. Arkistoitu 20.10.2019. Viitattu 20.10.2019. (englanniksi)
- ↑ Distributed database, Its.bldrdoc.gov (Arkistoitu – Internet Archive)
- ↑ Michael Stonebraker & Andrew Pavlo: What Goes Around Comes Around... And Around... (PDF) db.cs.cmu.edu. kesäkuu 2024. Viitattu 22.10.2024. (englanniksi)
- ↑ a b c d e f Understanding the Hierarchical Database Model mariadb.com. Viitattu 20.10.2019. (englanniksi)
- ↑ a b Hierarchical Model (PDF) db-book.com. Viitattu 30.6.2019. (englanniksi)
- ↑ IBM Information Management System (IMS) 13 Transaction and Database Servers delivers high performance and low total cost of ownership 1.10.2013. IBM. Viitattu 21.10.2019. (englanniksi)
- ↑ IBM Information Management System: From Apollo to Enterprise informit.com. 21.12.2011. Viitattu 12.3.2020. (englanniksi)
- ↑ a b c d Understanding the Network Database Model mariadb.com. Viitattu 20.10.2019. (englanniksi)
- ↑ Understanding the Relational Database Model mariadb.com. Viitattu 20.10.2019. (englanniksi)
- ↑ a b c Network Database Model Vs. Relational Model raima.com. Viitattu 20.10.2019. (englanniksi)
- ↑ a b Thelin, Roy: RDBMS versus ODBMS nomad-ret.net. Viitattu 21.8.2017.
- ↑ Keith D. Foote: A Brief History of Database Management dataversity.net. 23.3.2017. Viitattu 20.10.2019. (englanniksi)
Aiheesta muualla
[muokkaa | muokkaa wikitekstiä]- Kuvia tai muita tiedostoja aiheesta Tietokanta Wikimedia Commonsissa