Osa 2

Muutamia tietokannanhallintajärjestelmiä

Tietokannat ja niiden käsittelyyn käytetyt tietokannanhallintajärjestelmät ovat merkittävä osa tietojenkäsittelytieteen historiaa. Ensimmäiset tietokoneohjelmat kehitettiin 1950-luvulla ja ensimmäiset tietokannanhallintajärjestelmät 1960-luvulta. Muutama vuosikymmen myöhemmin, näitä seurasi relaatiomalliin perustuvat ja SQL-kieltä hyödyntävät relaatiotietokannat, jotka ovat yhä oleellisessa osassa ohjelmistojärjestelmiä.

Tietokannanhallintajärjestelmiä on kehitetty vuosien aikana useita. Pelkästään osoitteessa https://en.wikipedia.org/wiki/Comparisonofrelationaldatabasemanagement_systems oleva lista relaatiotietokantojen käsittelyyn tarkoitetuista tietokannanhallintajärjestelmistä sisältää kymmeniä järjestelmiä.

Tutustutaan seuraavaksi pikaisesti muutamaan tietokannanhallintajärjestelmään.

SQLite

SQLite on yksi eniten käytetyistä tietokannanhallintajärjestelmistä. Sitä käytetään muunmuassa Android-sovelluksissa, Chrome-selaimessa sekä useissa käyttöjärjestelmissä kuten Windows 10:ssä.
SQLiten saa ladattua osoitteesta https://www.sqlite.org/download.html. Osoite sisältää käyttöjärjestelmäkohtaisia paketteja sqliten asentamiseen. Linux-koneissa ja mac-koneissa sqlite on yleensä valmiiksi asennettuna.

Kun olet tallentanut (ja asentanut) SQLiten, on sen käyttöönotto suoraviivausta: sovellus käynnistyy kirjoittamalla terminaalissa komennon sqlite3. Mikäli SQLitellä haluaa avata tietokannan, voi tietokannan sisältävän tiedoston nimen antaa suoraan käynnistyskomennolle — esim. sqlite3 tietokanta.db. Mikäli kyseistä tiedostoa ei löydy, luo SQLite uuden annetun nimisen tietokannan.

Kun käynnistät tietokannanhallintajärjestelmän, voit tehdä tietokannassa omia kokeilujasi. Tietokannan käynnistäminen näyttää esimerkiksi seuraavalta.

Esimerkkitulostus

kayttaja@kone:~/kansio/$ sqlite3 tietokanta.db SQLite version 3.11.0 2016-02-15 17:29:24 Enter ".help" for usage hints. sqlite> SELECT 1; 1 sqlite>

Yllä annettu käsky SELECT 1 tulostaa arvon 1. Sitä voi käyttää ensimmäisenä komentona tietokannan toiminnan tarkasteluun. Voit käyttää kyseistä tietokantaa esimerkkien testaamiseen. SQLitessä annettu komento .help tulostaa saatavilla olevat komennot sekä ohjeistuksen.

Yksinkertainen tietokannan luominen, tiedon lisääminen sekä tiedon hakeminen onnistuisi seuraavalla tavalla. Alla käytetään pääavaimen määrittelyssä SQLitelle spesifiä komentoa AUTOINCREMENT, joka luo pääavaimesta automaattisesti kasvavan. Määreen käyttö onnistuu vain mikäli sarake määritellään samalla pääavaimeksi. Tällöin pääavaimen arvoja ei tarvitse itse syöttää tauluun.

Alla oleva esimerkki esittelee joitakin SQLiten komentoja.

Esimerkkitulostus

kayttaja@kone:~/kansio/$ sqlite3 tietokanta.db SQLite version 3.11.0 2016-02-15 17:29:24 Enter ".help" for usage hints. sqlite> CREATE TABLE Henkilo ( id INTEGER PRIMARY KEY AUTOINCREMENT, nimi VARCHAR(255) ); sqlite> .tables Henkilo sqlite> SELECT * FROM Henkilo; sqlite> INSERT INTO Henkilo (nimi) VALUES ('Charles Bachman'); sqlite> SELECT * FROM Henkilo; 1|Charles Bachman sqlite> .headers on sqlite> SELECT * FROM Henkilo; id|nimi 1|Charles Bachman sqlite> .exit kayttaja@kone:~/kansio/$ sqlite3 tietokanta.db SQLite version 3.11.0 2016-02-15 17:29:24 Enter ".help" for usage hints. sqlite> SELECT * FROM Henkilo; 1|Charles Bachman sqlite> .exit kayttaja@kone:~/kansio/$

H2

H2 on erityisesti Java-kielisissä ohjelmissa paljon käytetty tietokannanhallintajärjestelmä. Esimerkiksi tällä kurssilla käytettävä SQL-trainer tarkastaa SQL-kyselyt H2-tietokannanhallintajärjestelmää käyttäen. H2-tietokannanhallintajärjestelmän saa ladattua osoitteesta http://www.h2database.com/html/download.html.

Alla olevassa esimerkissä käynnistämme H2-tietokannanhallintajärjestelmän konsolin komentoriviltä, ja avaamme (tai luomme) samassa kansiossa olevan tiedoston tietokanta.db. Kun H2 käynnistetään, se kysyy ensin tietokannan osoitetta — alla hdbc:h2:file:./tietokanta.db eli luomme tiedoston tietokanta.db. Tämän jälkeen ohjelma kysyy ajuria, käyttäjätunnusta ja salasanaa. Kaikkien näiden kohdalla painetaan enteriä, eli käytetään oletusarvoja. Alla oletetaan, että tässä on ladattu jar-tiedosto, käyttäjällä on Java asennettuna koneelle, ja että tiedosto on käyttäjän kansiossa kansio.

Esimerkkitulostus

tunnus@kone:~/kansio$ ls h2-1.4.197.jar tunnus@kone:~/kansio$ java -cp h2-1.4.197.jar org.h2.tools.Shell

Welcome to H2 Shell 1.4.197 (2018-03-18) Exit with Ctrl+C [Enter] jdbc:h2:mem:testdb URL jdbc:h2:file:./tietokanta.db [Enter] org.h2.Driver Driver [Enter] sa User [Enter] Hide Password Password Connected Commands are case insensitive; SQL statements end with ';' help or ? Display this help list Toggle result list / stack trace mode maxwidth Set maximum column width (default is 100) autocommit Enable or disable autocommit history Show the last 20 statements quit or exit Close the connection and exit

sql> CREATE TABLE Henkilo ( ...> id INTEGER PRIMARY KEY AUTO_INCREMENT, ...> nimi VARCHAR(255) ...> ); (Update count: 0, 48 ms) sql> INSERT INTO Henkilo(nimi) VALUES ('Charles Bachman'); (Update count: 1, 7 ms) sql> SELECT * FROM Henkilo; ID | NIMI 1 | Charles Bachman (1 row, 21 ms) sql> exit Connection closed tunnus@kone:~/kansio$ ls h2-1.4.197.jar tietokanta.db.mv.db tietokanta.db.trace.db tunnus@kone:~/kansio$

Esimerkin suorituksen jälkeen kansioon on luotu kaksi tiedostoa tietokanta.db.mv.db sekä tietokanta.db.trace.db, jotka sisältävät tietokantaan liittyvän tietokantataulun sekä datan.

H2-tietokannanhallintajärjestelmän voi käynnistää myös web-konsolina, jolloin samat tiedot tulevat näkyviin selaimeen. Tämä onnistuu helposti, olettaen että järjestelmässä ei ole palomuuria tai muuta vastaavaa, joka estäisi käynnistyksen.

Esimerkkitulostus

tunnus@kone:~/kansio$ java -jar h2-1.4.197.jar Opening in existing browser session.

Mikäli aukeavaan konsoliin syöttää osoitteeksi (jdbc URL) aiemmin konsoliesimerkissä antamamme ja luomamme osoitteen jdbc:h2:file:./tietokanta.db, pääsemme käsittelemään edellä luomaamme tietokantaa.

Muita järjestelmiä

Muita erittäin yleisessä käytössä olevia tietokannanhallintajärjestelmiä ovat muunmuassa MySQL, MariaDB ja PostgreSQL. Kuten edellä, missä SQLiten automaattinen pääavaimen arvon kasvattaminen tapahtuu avainsanalla AUTOINCREMENT ja H2-tietokannassa samaan tarvitaan avainsana AUTO_INCREMENT, myös MySQL, MariaDB ja PostgreSQL poikkeavat toisistaan hieman.

Emme syvenny tähän näihin järjestelmiin tällä kurssilla.

Tietokannan käyttöönotto

Seuraavat kyselytehtävät olettavat, että otat haltuusi joko SQLite-tietokannanhallintajärjestelmän, H2-tietokannanhallintajärjestelmän tai jonkun muun tietokannanhallintajärjestelmän. Kyselytehtävät käyttävät Chinook-tietokantaa, jonka rakenne on seuraava:
Chinook-tietokannan skeema.  

Olemme luoneet Chinook-tietokannan käyttöönottoa varten seuraavat kolme tiedostoa:

  • SQLiteen ladattavan tietokantatiedoston. Voit ladata SQLiteä varten valmistellun tietokantatiedoston tästä linkistä. SQLiten käynnistyskomento — mikäli käyttäjä on samassa kansiossa kuin tietokantatiedosto — on sqlite3 chinook_sqlite.db. Komento sqlite3 voi poiketa käyttöjärjestelmien välillä.
  • H2-tietokannanhallintajärjestelmää varten ladattavan tietokantatiedoston. Voit ladata H2-tietokannanhallintajärjestelmää varten valmistellun tietokantatiedoston tästä linkistä. Tietokantatiedosto on H2-tietokannanhallintajärjestelmässä muotoa chinook_h2.db ja sen osoite — mikäli käynnistyksessä käytetään samaa polkua kuin missä H2 on — on jdbc:h2:file:./chinook_h2.db.
  • Tietokannan luomiseen sekä tiedon lisäämiseen tietokantaan tarvittavat SQL-kieliset komennot, jotka voi ajaa johonkin muuhun tietokannanhallintajärjestelmään. SQL-kieliset komennot löytyvät löytyvät tämän linkin takaa.

Seuraavat kyselyt olettavat, että tuot Chinook-tietokannan omalle koneellesi ja käynnistät sen jollain edellä kuvatusta tietokannanhallintajärjestelmästä. Mikäli koneellasi ei ole oikeuksia ohjelmien asentamiseen, valitse tietokannaksi H2 — olettaen, että olet käynyt Ohjelmoinnin MOOCin sekä asentanut siinä tarvittavan Javan.

Kurssin Tietokone Työvälineenä materiaalista saattaa olla tässä myös hyötyä.
Pääsit aliluvun loppuun! Jatka tästä seuraavaan osaan: