Kurssimoniste 2015 - Noppa - Lappeenrannan teknillinen yliopisto
Transcription
Kurssimoniste 2015 - Noppa - Lappeenrannan teknillinen yliopisto
1 CT60A4301 Tietokannat 5 op KURSSIMONISTE KEVÄT 2015 Koonnut: Erja Mustonen-Ollila Lisäykset vuodelle 2015: 1.1.2015/Erja Mustonen-Ollila 2 CT60A4301 Tietokannat -kurssin sisältö ja suorittaminen Kevään 2015 luentoaikataulu, harjoitusaikataulu, Viope-verkkokurssin suoritusaikataulu, tentit, kurssin loppuarvosana ja kurssipalaute: Luennot pidetään maanantaisin klo 12.15-13.45 salissa 4511. Harjoitukset pidetään keskiviikkoisin klo 15.15-16.45 mikroluokassa 6218. Harjoitukset alkavat ensimmäisellä luentoviikolla. Harjoitustyön palautuspäivä on perjantai 29.5.2015 kello 23.59 sähköpostin liitteenä. Katso tarkemmat ohjeet harjoitusohjeen kohdasta Nopasta. Harjoitustyö on pakollinen kurssin suorittamiseksi. Harjoitustyötä ohjaa kurssin luennoija. Harjoitustyön kiitettävästi suorittaminen korottaa kurssin loppuarvosanaa yhdellä (1) arvosanalla. ViopeSQL-verkkokurssi on pakollinen, mutta tentissä saa korvata SQL-kysymyksen kurssin suorittamisella (yhteensä 8 pistettä). Ohjeet SQL-verkkokurssista ovat Nopassa kohdassa ”Muu materiaali.” ViopeSQL- verkkokurssin suoritusaika päättyy 29.5.2015 kello 23.59. SQLViope verkkokurssia ohjaa kurssin luennoija Erja Mustonen-Ollila. Tentit Kurssiin kuuluu tentti. Opiskelijan on itsensä huolehdittava tentti-ilmoittautumisesta. Kurssin tentissä on 4 kysymystä, jotka kukin vastaavat 8 täyttä pistettä. SQLViope verkkokurssin suorittamisella saa 8 p tenttiin. Kurssin loppuarvosana Kurssin loppuarvosanan saamiseksi on opiskelijan suoritettava: tentti hyväksytyllä arvosanalla (minimissään arvosana 1), SQL-verkkokurssi ja harjoitustyö (hyväksytty tai kiittäen hyväksytty). Kurssipalaute: Kurssin loppupuolella luennoija lähettää palautekyselyn opiskelijoille vastattavaksi. Kurssipalaute näkyy Nopassa kohdassa tulokset. Kurssin vastapalaute: Opiskelijoilta saamaansa palautteeseen luennoija vastaa vastapalautteella. Vastapalaute löytyy Nopasta. Kaikissa kurssiin liittyvissä asioissa voi ottaa yhteyttä kurssin luennoijaan, email: [email protected] Vaihtoehtoinen tapa suorittaa kevään 2015 Tietokannat- kurssi: Koko Tietokannat kurssin voi suorittaa myös täysin etänä Stanford- yliopiston Databasekurssin avulla: https://class.stanford.edu/courses/DB/2014/SelfPaced/about Tässä Stanford- kurssin tapauksessa opiskelija kirjautuu itse etäkurssille ja suorittaa sen 29.5.2015 klo 23.59 mennessä ja saa siitä todennetun/todennetut sertifikaatit. Kopion sertifikaateista opiskelija toimittaa luennoijalle sähköpostin liitteenä. Suorittaminen korvaa luennot, harjoitukset, harjoitustyön, tentin ja SQL-Viopen verkkokurssin. Onnea kurssille! 3 Relaatiotietokannat ......................................................................................................................................................... 4 Tiedonhallintajärjestelmän perusteita ......................................................................................................................... 5 Relaatiotietokantojen tasot ja kuvausmallit ................................................................................................................ 7 Relaatiotietokannan perusteet ja termistöä ................................................................................................................. 7 Relaatiomalli ............................................................................................................................................................. 10 Käsitenalyysi ............................................................................................................................................................ 10 Käsiteanalyysin pohja: ER-malli (entity-relationships model) ................................................................................. 10 Relaatioalgebran perusoperaatiot .............................................................................................................................. 13 Tietokannan suunnittelu- ja toteutusprosessi ................................................................................................................ 15 Tietokannan suunnittelun vaiheet ............................................................................................................................. 15 ER-mallintamisen peruskäsitteet .............................................................................................................................. 24 ER-kaaviosta relaatiomalliksi: esimerkkejä .............................................................................................................. 26 ER-mallista relaatioiksi -säännöt .............................................................................................................................. 27 Tietokannan normalisointi ............................................................................................................................................ 28 SQL-kieli ...................................................................................................................................................................... 32 Oliotietokannat ............................................................................................................................................................. 35 Olio-relaatiomalli .................................................................................................................................................... 36 Open Database Connectivity (ODBC) ja OLE DB .............................................................................................. 37 Oliotietokannat ja OQL ......................................................................................................................................... 37 Oliosuuntautuneet tietokannat .............................................................................................................................. 38 Olion identiteetti, olion rakenne ja tyypin rakentajat ................................................................................................ 38 OQL .............................................................................................................................................................................. 41 SQL-3 (SQL:99) ........................................................................................................................................................... 41 TIETOKANTASUUNNITTELUN PERUSTEET ....................................................................................................... 42 Seuraavat materiaalit ovat uutta vuoden 2015 luentomateriaalia: ................................................................................ 45 Tietokannan turvallisuus ............................................................................................................................................... 45 Tietoturvallisuus ........................................................................................................................................................... 45 Sovellusten turvallisuus ................................................................................................................................................ 47 Saatavuus ...................................................................................................................................................................... 48 Eheys ............................................................................................................................................................................ 48 Luottamuksellisuus ....................................................................................................................................................... 49 Tietokantojen uhat ........................................................................................................................................................ 50 Tietokannat ja tietoverkot ............................................................................................................................................. 53 Tietoverkkojen ja tietokantojen rajapinnat ................................................................................................................... 55 PHP Ja MySQL............................................................................................................................................................. 56 Hajautetut tietokannat & tietovarastointi ...................................................................................................................... 58 HAJAUTETUT TIETOKANNAT (Distributed database) ........................................................................................... 58 Komplikaatiot ............................................................................................................................................................... 58 Hajautettujen tietokantojen suunnittelu ........................................................................................................................ 59 Hajautettu hakemistojen hallinta................................................................................................................................... 59 Hajautettu kyselyn prosessointi .................................................................................................................................... 59 Hajautettu samanaikaisuuden hallinta........................................................................................................................... 59 Hajautettu umpikujan hallinta ....................................................................................................................................... 60 Hajautetun tietokannan luotettavuus ............................................................................................................................. 60 Toistuvuus .................................................................................................................................................................... 60 TIETOVARASTOINTI (Data warehousing)................................................................................................................ 61 Yleinen arkkitehtuuri .................................................................................................................................................... 61 Tietovaraston ominaisuudet .......................................................................................................................................... 62 Tietovarastoinnin uudet trendit ..................................................................................................................................... 63 4 Relaatiotietokannat Kurssin relaatiotietokantojen osuus jäsentyy alla olevan kuvan 1 mukaisesti. Kuva 1. reaalimaailma Käyttäjä ja Käyttäjän toiveet mallinnus Tk:n määrit tely LomakeRaportti yms. määr Tk:n käyttämi nen ERkaavio TiedonhallintaJärjestelmän ydin Muunto relaatioiksi Tietohakemisto Thj:n käyttöliittymät Thj:n fyysiset liittymät Tietokanta relaatiomalli 5 Tiedonhallintajärjestelmän perusteita Tiedonhallintajärjestelmän rakennetta voi parhaiten selittää alla olevan kuvan 2 avulla. Määritykset ja määrityksien muutokset Tietokantakyselyt Tietojen lisäykset, poistot ja muutokset Kuva 2. "Kyselyjen" prosessointi Transaktioiden hallinta Tietohakemisto ja tietokanta (metadata ja data) Tiedostojen hallinta Tiedonhallintajärjestelmä prosessoi (tulkitsee, optimoi, suorittaa) käyttäjiltä ja ohjelmista tulevia sanomia, jotka voivat olla: - kyselyjä tietokannasta - tietokannan tietojen lisäyksiä, poistoja ja muutoksia - tietokannan tietojen määritysten muutoksia Tiedonhallintajärjestelmän pitää em. "käyttäjäpalveluiden" lisäksi huolta tietokannan eheydestä. Tätä varten tiedonhallintajärjestelmä valvoo transaktioita (sanomia) mm. niiden alkamista, päättymistä, peruutuksia, varmistuksia ja uudelleensuorituksia esim. lukkojen, loki-tiedostojen ja aikaleimojen avulla. Tiedonhallintajärjestelmä hoitaa tietokannan ja tietohakemiston tiedostonhallinnan joko käyttöjärjestelmän avulla (pienehköissä tiedonhallintajärjestelmissä) tai pääosin omatoimisesti (suuremmissa tiedonhallintajärjestelmissä). Tiedonhallintajärjestelmä hakee tietokannasta tietoja (ja vie tietoja) ja muuntaa ne tietohakemistossa olevien määrittelyjen mukaisina käyttäjille (tai sovellusohjelmille). Em. tehtävien lisäksi tiedonhallintajärjestelmään kuuluviksi luetaan mm, tietokannan konvertointityökaluja (versiosta toiseen tai toiseen tietokantajärjestelmään), varmistuksiin ja palautuksiin liittyviä ohjelmia, eheyden tarkistuksiin ja korjaamiseen liittyviä ohjelmia ja tietokannan dokumentointityökaluja. Tietokannassa ovat varsinaiset käyttäjien tarvitsemat ja tallentamat tiedot. Tietokannan tiedostorakenne ei näy käyttäjälle eikä myöskään sovellusohjelmalle, vaan tiedonhallintajärjestelmä hoitaa tietojen talletukset ja haut tietokantaan ja tietokannasta. Tietokannassa saattaa olla lisäksi 6 indeksi- tai puurakenteita nopeuttamassa hakua. Tietokannan suunnittelija tai vastuuhenkilö voi määritellä tietyt tiedot indeksoitaviksi, mutta jotkut tiedonhallintajärjestelmät osaavat optimoida tietokannan rakennetta ja tarvittaessa luoda uusia indeksitauluja. Tietohakemistossa ovat tietokannan tietojen kuvaukset, mm. tietojen nimet, tyypit, ulkoasu, tiedon pituus , tarkistussäännöt, triggerit, mahdollisia ilmoituksia, syöttömaskit, pakollisuus, oletusarvo ja avainkenttien määrittelyt. Tietokannan tietojen määrittelyistä osa on sellaisia, että niitä voi vaihtaa myös tietokannan perustamisen jälkeen ja osa määrittelyistä vaatii tietokannan konversiota tullakseen voimaan. Tietokantoja käytettäessä ohjelmiin ei siis tarvitse kirjoittaa mitään tietuekuvauksia, koska tiedonhallintajärjestelmä löytää tiedon nimen perusteella tietohakemistosta tiedon ominaisuudet. Tietokannan ja tietohakemistojen lisäksi tiedonhallintajärjestelmä luo ja pitää yllä lokitiedostoja, joihin kerätään tietokannan muutostapahtumia, joita voidaan käyttää tietokannan uudelleen organisointiin esim laitehäiriön jälkeen. Tietokannan hallintajärjestelmiä ovat esim. Oracle, DB2, Ingres ja SQL Server. Tietyin rajoituksin tietokannan hallintajärjestelmäksi voi kutsua myös Accessia ja Paradoxia. Hallintajärjestelmän muita perusvaatimuksia ovat seuraavat: perusoperaatiot (tallennus, haku, päivitys), tietoriippumattomuus, yhteiskäyttö, ylimäärättömyys, turvaaminen, tehokkuus ja suorituskyky, yhteensopivuus ja skaalautuvuus. Tietokannan hallintajärjestelmien huonoja puolia ovat mm. monimutkaisuus, koko, hinta, laitteistokustannukset, muutoskustannukset, suorituskyky ja vahinkojen suuri vaikutus. Tietoturvaa hoidetaan mm. seuraavilla oikeuksissa asioiden takia: taulukon omistajan (owner) määrittely (authorization), tietokantakäsittelyn valtuuksien myöntäminen (grant), oikeuksin delegoida valtuus edelleen (with grant option), valtuuksien epääminen (revoke) ja myös näkymien käsittelyyn voidaan myöntää oikeudet. Kustannuksia aiheuttava elvytys koostuu seuraavista osioista: varmuuskopio (backup copy), kopio koko tietokannasta tiettynä ajanhetkenä, pystytään palauttamaan (restore) tietty aikaisempi tietokannan tilanne, lokitiedosto (log file), voidaan siirtyä tietokannan tilasta toiseen, ajallisesti eteen tai taaksepäin. Jokaisen tietokantaan tehtävän muutoksen yhteydessä kirjoitetaan lokitiedostoon tietueen esi- ja jälkivedokset, jossa esivedos on kopio tietueesta ennen päivitystä ja jälkivedos on kopio tietueesta päivityksen jälkeen. Lisäyksen yhteydessä syntyy vain jälkivedos ja poiston yhteydessä syntyy vain esivedos. Tapahtumien (transaktio) lokitiedostoa käytetään mahdollistamaan palautuminen keskeytyneestä transaktiosta. Transaktio toteutetaan kokonaisuudessaan tai ei ollenkaan (atomicity). Tietokanta on ennen ja jälkeen transaktion ristiriidattomassa (consistent) tilassa. Eristyvyys (isolation) tarkoittaa, että transaktion aiheuttamat muutokset eivät saa näkyä muille ennen kuin koko transaktio on hyväksytty (commit) ja pysyvyys (durability) saavutettu. Kun tapahtuma on vahvistettu (commit), tapahtuman tulokset eivät häviä missään olosuhteissa. Keskeytyneen (aborted) transaktion tietokantaan tekemät muutokset pitää peruuttaa (rollback). Lisäksi tulee huomioida samanaikaisuuden käsittely (concurrency control) eli samanaikaiset transaktiot eivät saa sekoittua keskenään. Yhteiskäytössä useampi ihminen käyttää tietokantaa samanaikaisesti josta voi seurata ongelmia jos yhteiskäyttöön ei ole varauduttu. Keinona on on rajoittaa muiden käyttäjien mahdollisuuksia jonkin resurssin käytössä. Pessimistinen tapa (lukitukset) on toinen vaihtoehto. Tällöin 7 tietue lukitaan koko toimintoketjun ajaksi muilta käyttäjiltä. Optimistisempi tapa eli aikaleimat päivityksessä tarkoittaa sitä, että tietuetta päivitettäessä tutkitaan onko tietueessa "käyty" sen jälkeen kun se otettiin muutettavaksi (aikaleimat). Pessimistisessä lukituksessa käytetään eritasoisia lukituksia. 1)S-lukitus eli jaettu lukitus (shared): lukon omistaja ja muut voivat lukea sivun tietoja, mutta eivät päivittää niitä. Muut saavat S- ja Ulukituksia tälle sivulle. 2) U-lukitus eli päivityslukitus (update): lukituksen omistaja voi lukea tietoa ja aikoo päivittää sitä. Kukaan muu ei voi saada U- eikä X-lukitusta. Ennen päivitystä lukon omistaja odottaa, ettei muilla ole sivulle S-lukitusta. Sitten hän pyytää X-lukituksen ja suorittaa päivityksen. 3) X-lukitus eli poissulkeva (exclusive): lukituksen omistaja voi lukea tai päivittää lukittua dataa. Kukaan muu ei voi saada lukitusta. Lukkiumien (deadlocks) ennaltaehkäisy on oleellista. Tästä tietoa enemmän käyttöjärjestelmien kurssilla. Relaatiotietokantojen tasot ja kuvausmallit Relaatiotietokanta käsittää kolme tasoa: ulkoisen, käsitteellisen ja sisäisen tason. Sisäinen taso kuvaa tietokannan fyysistä rakennetta, todellisia talletettuja tietoja. Tiedon esitystapa, saantipolut yms. määritellään tällä tasolla. Käsitteellinen taso esittää koko tietokannan loogisen sisällön. Kuvaukset voidaan esittää joko käytetystä tietokantamallista riippumattomalla loogisella tasolla tai jonkin semanttisen (merkitystä kuvaavan) mallin mukaan tai tietokantamallin (kuten relaatiomallin) mukaan. Ulkoinen taso kuvaa tietokantaa tietyn käyttäjäryhmän tai sovelluksen kannalta. Käsitteellisellä tasolla yhtyvät kaikki ulkoisen tason näkymät. Ts. kolmentasoinen tietokantarakenne mahdollistaa sen, että käsitteellisen tason kuvaukset voivat muodostaa kohdealueesta suhteellisen pysyvän mallin. Tietokantariippumattomuus: looginen tietokantariippumattomuus kuvaa ulkoisen tason ja käsitteellisen tason keskinäistä riippumattomuutta ja fyysinen tietokantariippumattomuus kuvaa käsitteellisen tason ja sisäisen tason keskinäistä riippumattomuutta. Tietokannan rakenteen kuvaamiseen käytetään tietomalleja, jotka jaetaan semanttisiin malleihin, tietokantamalleihin ja fyysisiin malleihin. Semanttiset mallit: ER-malli: maailma kuvataan olioina ja niiden välisinä suhteina. ER-mallin pohjana on joukkoteoria ja relaatioteoria. Tietokantamallit: hierarkkinen malli, verkkomalli ja relaatiomalli. Hierarkkinen malli ja verkkomalli antavat käyttäjälle keinot navigoida tietokannassa tietuetasolla. Relaatiomalli sisältää lisäksi tietorakennetason, eikä tietuetaso välttämättä näy sen tietojenkäsittelyssä. Fyysiset mallit esittävät, miten tietokanta on talletettu muistiin. Ne käsittelevät tietuemuotoja, tietuejärjestystä ja hakupolkuja. Relaatiotietokannan perusteet ja termistöä E.F.Codd esitti vuonna 1970 relaatiotietokannan keskeiset ideat julkaisussa "A relational model for large shared data banks". Perusideoita ovat: 8 - Tietokanta näkyy käyttäjille tauluina eli relaatioina (vrt. excel-taulut). Siitä, millä tavalla tiedot on talletettu levylle, pitää huolta tiedonhallintajärjestelmä eikä käyttäjä tai sovellusohjelma "näe" tietokannan fyysistä talletusrakennetta (looginen ja fyysinen tietoriippumattomuus) - Tietokannan taulujen välillä voi olla yhteyksiä eli riippuvuuksia (relationship). - Tietokannan yksi taulu sisältää rivejä (vrt. tietueet) ja sarakkeita (vrt. tietueessa yksittäinen tieto). - Taulussa jokin tieto (tai tietojen yhdistelmä) on avain-kenttä, jonka avulla voidaan identifioida taulun rivi yksikäsitteisesti. - Vierasavain tarkoittaa taulussa sellaista tietoa, jonka avulla löydetään jostain toisesta taulusta haluttu rivi (tai halutut rivit) esim. tilitaulussa vierasavain on tilinomistaja, joka viittaa henkilotaulun henkilotunnus-tietoon (katso alla kuva 3). - Matemaattisesti perusteltu eli perustuu relaatioalgebraan. Tämä takaa sen, että relaatiotietokanta saadaan ohjelmallisesti toteutettua, kun on olemassa matemaattinen perusta algoritmiseen ohjelmointiin. - SQL- kieli (Structured Query Language), joka perustuu edellä mainittuun relaatioalgebraan. Kuva 3. Tilitaulu Tilinnro* 12345 34567 Henktaulu hetu* 220345-6782 121212-6543 Tilin saldo 100,00 2340,00 Tilin omistaja 220345-6782 121212-6543 nimi Matti Mattila Aino Kallas Tilin tyyppi Luotollinen Karttuva lähiosoite Kaivokatu 12 A 23 Alkutie 11 Postitmp 00100 Hki 00660 Hki Relaatiotietokantojen "hyvyys" perustuu siihen, että relaatiotietokannat ja niissä tapahtuvat operaatiot voidaan kuvata matemaattisesti selkeästi relaatio-algebran avulla, mikä mahdollistaa käyttäjäystävälliset kyselykielet (esim. SQL) ja tehokkaat käsittelyalgoritmit. Relaatiotietokantojen "puutteena" voitaneen pitää sitä, että ne edellyttävät tietojen olevan unaarisia eli yksittäisiä ts. tietokannan tietyssä sarakkessa on yksi tieto. Sarake ei voi olla esim. lista tai uusi taulukko, niinkuin esim. C-kielen tietue-määrittelyssä tai oliotietokannoissa. Relaatiotietokanta muodostuu tauluista (tables), jotka sisältävät kenttiä (fields). Taulun nimeksi kannattaa valita jokin selkeä ja kuvaava nimi. Nimessä kannattaa kuitenkin välttää välilyöntejä, erikoismerkkejä ja skandinaavisia merkkejä (å,ä,ö). Jokainen taulu sisältää yhden tai useamman kentän Kenttiä (fields)luotaessa niille määritellään seuraavanlaisia ominaisuuksia: Kentän nimi Kentän nimeksi kannattaa valita jokin selkeä ja kuvaava nimi. Nimessä kannattaa kuitenkin välttää välilyöntejä, erikoismerkkejä ja skandinaavisia merkkejä (å,ä,ö). Tietotyyppi Numeerinen Merkkijono Aika Kiinteä vai vaihtuvamittainen kenttä? Maksimipituus ja mahdollinen tarkkuus 9 Onko tieto pakollinen: mahdollisimman moni kenttä pitää määritellä pakolliseksi, jolloin vältetään NULL-arvojen tuomat ongelmat. Tarkistukset syötettävän tiedon oikeellisuudelle tai sallittujen arvojoukkojen joukko. Oletusarvo AVAIMET (keys): - perusavain (primary key) - yksikäsitteinen muodostuen yhdestä tai useammasta sarakkeesta - taulusta ei saa löytyä identtisiä perusavaimen arvoja - ei saa puuttua yhdeltäkään riviltä - perusavaimen eheys (entity integrity) - toissijaiset avaimet (secondary key, secondary index) nopeuttavat taulun järjestämistä - viite-avaimet (foreign keys) - määritysalue on sama kuin jonkin perusavaimen Viite-eheys (Referential Integrity): Jokaista taulussa esiintyvää (NULL:sta poikkeavaa) viiteavaimen arvoa pitää vastata sama perusavaimen arvo taulussa, johon viiteavain viittaa. Yritettäessä rikkoa viite-eheyttä perusavaimen päivityksellä on kolme vaihtoehtoa: - NULLIFIES eli viiteavaimen nollaus: kaikki poistuvaan perusavaimeen viittaavat viiteavaimet muutetaan NULLeiksi soveltuu vain sarakkeisiin, joilta ei ole kielletty puuttuvaa arvoa (NOT NULL) - CASCADES eli johdannaispoisto: kaikki poistuvaan perusavaimeen viittaavat viiteavaimet ja vastaavat rivit poistetaan - RESTRICTED eli rajoitettu poisto: voidaan poistaa vain perusavaimet, joihin ei ole viittauksia eli kyseistä päivitystä ei tehdä. Viite-eheysmäärittelyt: Many-to-Many -suhteisiin DELETE RESTRICTED, UPDATE CASCADES Many-to-One -suhteet DELETE RESTRICTED, UPDATE CASCADES heikoille kohdetyypeille DELETE CASCADES, UPDATE CASCADES Tietokanta on kokoelma yhteen liittyvää tietoa (data). Tietokanta on loogisesti yhtenäinen kokoelma tietoa jolla on jokin merkitys. Tietokanta on suunniteltu, rakennettu ja täytetty tiedolla jotain tiettyä tarkoitusta varten. Sillä on jokin tarkoitettu käyttäjäryhmä ja joitain ennalta laadittuja ohjelmia joita käyttäjät käyttävät. Kukin tieto talletetaan kannassa vain yhteen paikkaan eli ei esiinny turhaa toistuvuutta (redundanssia). Tietoja pystytään hakemaan joustavasti erilaisin perustein, myös sellaisin, joita ei tietokantaa suunnitellessa ole pystytty ennakoimaan. Tietokannan rakenteellinen muuttaminen on joustavaa Hyväksikäyttö ja sovellusohjelmat ovat riippumattomia tietojen fyysisestä talletusrakenteesta: tietoriippumattomuus. Muita relaatiotietokantoihin liittyviä termejä ja ominaisuuksia ovat seuraavat: ristiriidattomuus (Consistency), normalisointi (Normalization), tietokantaskeemat (Database schemas), tapahtumien hallinta (Transaction management), Jakamattomuus (Atomicity), pysyvyys (Durability), samanaikaisuuden hallinta (Concurrency Control), transaction isolation, transaction serializability. 10 Relaatiomalli Relaatiomalli (Codd, 1970) koostuu kolmesta komponentista: 1. Tietorakenne - käyttäjä näkee tiedot kokoelmana taulukkoja ja ainoastaan taulukkoja - taulukoihin eli tauluihin liittyy myös indeksejä - tauluille on asetettu tarkat vaatimukset mm. rakenteen ja yksikäsitteisyyden suhteen. Näistä taulukoista käytetään myös nimitystä relaatio. Relaatiotaulut sisältävät attributteja eli sarakkeita, joille on määriteltävä arvoalueet. Muut käsitteet ovat: monikko eli taulun rivi, avainehdokas, perusavain, toisioavain, viiteavain. 2. Tiedonkäsittely Relaatiomalliin kuuluvat relaatio-operaatiot muodostavat mallin olennaisen osan. Tietokantakäsittely tapahtuu relaatiomallissa pääasiassa taulukoiden, ei yksittäisten rivien käsittelynä. Relaatioalgebrassa määritellään operaatiot (yhdiste, leikkaus, erotus, tulo, valinta, projektio, jako, liitos, jotka käsitellään myöhemmin tarkemmin tässä kurssimonisteessa. 3. Tiedon eheys: - relaatiomalliin kuuluu joukko eheyssääntöjä - eheydellä tarkoitetaan tietojen ristiriidattomuutta ja oikeellisuutta - mallissa määritellään taulun sisäisten eheyssääntöjen lisäksi taulujen välistä viite-eheyttä koskevia sääntöjä - relaatiomalli keskittyy käyttäjän tietonäkemykseen ja siis tietokannan ulkoiseen ja käsitteelliseen tasoon - relaatiotietokanta on ainakin pääpiirteissään edellä esitetyn relaatiomallin mukainen tietokanta. Käsitenalyysi Tietokannan suunnittelu aloitetaan käsiteanalyysillä. Analyysin kohteena on koko toimintayksikkö tai sen osa (rajattu alue). Käsitenalyysin tuloksena syntyy kohdealuetta kuvaava looginen malli, käsitemalli. Käsitemalli esitetään graafisesti käsitekaaviona ja täydennetään tietokuvauksin. Kohdealue kuvataan pelkistetysti tietokantaa varten. Käsitemalli sisältää kohdealueen tietojen rakenteen lisäksi eheyssääntöjä. Käsitenalyysin käyttö johtaa tietokantaratkaisuihin, jotka ovat tietoja toteutusriippumattomia. Tietoja tarkastellaan loogisella tasolla ja ne heijastelevat toiminnan tavoitteita, eivät tietokannan toteutustekniikkaa. Tavoitteena on rakentaa malli, joka on maksimaalisen pysyvä. Käsiteanalyysin pohja: ER-malli (entity-relationships model) ER-mallin mukaan reaalimaailma jäsennetään a) yksilöiksi (Entity), b) niiden välisiksi suhteiksi (relationship) sekä c) ominaisuuksiksi (Attribute). Jokaiselle yksilölle etsitään lisäksi yksilöivä avain. Käsiteanalyysissä käytetään termejä yksilötyyppi, yhteystyyppi ja ominaisuustyyppi, joilla tarkoitetaan kokonaisia luokkia, jotka sisältävät yksittäisiä yksilöitä, yhteyksiä ja ominaisuuksia. 11 Käsiteanalyysin eteneminen vaiheittain: 1) Yksilötyyppien määritys: etsitään kohdealueeseen liittyvät yksilötyypit. Etsitään synonyymit ja homonyymit. 2) Yhteystyyppien määritys: nimetään yhteystyypit ja määritellään ne alustavasti, yhteystyypin aste ja mahdollinen ehdollisuus ja laji selvitetään. Aletaan muodostaa käsitemallikaaviota. 3) Avainten etsiminen: jokaiselle yksilötyypille yksilöivä perusavain sekä toisio- ja viiteavaimet. Muokataan käsitemalli. 4) Avaimia koskevien eheyssääntöjen määritys: perusavaimia ja toisioavaimia koskevat eheysäännöt ja yhteystyyppien eheyssäännöt 5) Ominaisuustyyppien määritys: etsitään ja määritellään ei-avain ominaisuustyypit kullekin yksilötyypille. Muutokset käsitemalliin. 6) Muiden eheyssääntöjen määritys: määritellään ominaisuustyyppejä koskevat arvoaluesäännöt. Muut ominaisuustyyppien eheyssäännöt. 7) Käsitemallin tarkistus: kriittisyys, virheiden ja puutteiden korjaus. Useita tarkistuskierroksia. 8) Määrittelyjen tarkastus ja viimeistely: tarkistetaan ja tarvittaessa täydennetään tehdyt kuvaukset. Yksilötyypit: Esim. opettaja, oppilas synonyymit= samasta asiasta kaksi eri nimitystä homonyymit= kahdella tai useammalla eri asialla oleva sama nimi Yhteystyypin suunta ja aste: suunnalla tarkoitetaan sitä, että kummasta yksilötyypistä lähtien yhteyttä tarkastellaan (vanhempilapsi). Aste vanhemman ja lapsen välillä voi olla: yhden suhde yhteen (1:1), yhden suhde moneen (1:N) tai monen suhde moneen (M:N). Monen suhde moneen- yhteys tulee AINA purkaa kahdeksi 1:N-yhteydeksi. Avaimet: perus- ja toisioavaimet ja viiteavaimet Jokaiselle yksilötyypille on määriteltävä sen yksilöiden identifioimiseen käytettävät avaimet: perusavaimet ja toisioavaimet ominaisuustyyppiä tai pienintä ominaisuustyyppiyhdistelmää, joka yksikäsitteisesti määrittelee yksilön, kutsutaan avainehdokkaaksi HUOM! Jos kahdella yksilöllä on sama avainehdokkaan arvo, ne ovat SAMA YKSILÖ! Yksilötyypillä voi olla useita avainehdokkaita. Perusavaimeksi valitaan jokin näistä avainehdokkaista, sellainen, jolle jokaisella yksilöllä on varmasti arvo.Muut avainehdokkaat nimetään toisioavaimiksi. Löydettyjen avainten tiedot liitetään käsitemalliin Viiteavaimet: Viiteavain on ominaisuustyyppi tai ominaisuustyyppijoukko, joka osoittaa yhteyden yksilötyypin vanhempaan (vanhemman perusavain). Viiteavain on lapsiyksilötyypissä ja on SAMA kuin yllämainittu vanhemman perusavain. Kaikkien yksilötyyppien viiteavaimet on määriteltävä. Viiteavaimet esittävät yksilötyyppien välisiä eheyssääntöjä. Avaimia koskevat eheyssäännöt: Perusavaimen valinta sisältää kaksi eheystarkistusta: -- jokaisella yksilöllä täytyy olla perusavaimelle arvo ja -- tämän arvon on oltava yksikäsitteinen jokaisella yksilöllä. Toisioavaimien valintasäännöt sisältävät myös eheystarkistuksia: -- jokaisella yksilöllä, jolla on toisioavaimella jokin arvo, arvo on yksikäsitteinen ja ehkä jokaisella yksilöllä täytyy olla toisioavainarvo eheyssäännöt tutkivat lisäysten, muutosten ja poistojen vaikutusta yhteystyyppeihin 12 olemassaolosäännöt: olosuhteet, joiden aikana perus- ja viiteavain voidaan lisätä, poistaa tai päivittää. Jokaista yhteystyyppiä varten selvitetään lisäys- ja poistosäännöt. Lisäyssäännöt: Lisäyssäännöt määrittävät milloin ja miten uuden lapsiyksilön voi lisätä tietokantaan. Lisäyssääntöjä on kuutta tyyppiä: - lapsiyksilön saa lisätä vain, jos vastaava vanhempiyksilö on olemassa - lapsiyksilön saa lisätä vain, jos vanhempiyksilö luodaan automaattisesti, ellei ole jo olemassa - lapsiyksilön saa lisätä aina; jos vastaavaa vanhempiyksilöä ei ole, viedään lapsen viiteavaimeen NULL-arvo - lapsiyksilön saa lisätä aina; jos vastaavaa vanhempiyksilö ei ole, viedään lapsen viiteavaimeen ennalta määrätty alkuarvo - lapsiyksilön saa lisätä vain, jos tietyt laatuehdot täytetään - lapsiyksilön lisääminen on aina sallittua; ei mitään tarkistuksia vanhempiyksilön suhteen. Poistosäännöt: Poistosäännöt määrittelevät olosuhteet, joiden aikana vanhempiyksilön voi poistaa tietokannasta tai päivittää sen perusavaimen. Kuusi eri poistosääntöä: - vanhempiyksilön saa poistaa vain, jos ei ole olemassa yhtään siihen liittyvää lapsiyksilöä; - vanhempiyksilön saa poistaa aina; vastaavat lapsiyksilöt poistetaan automaattisesti; - vanhempiyksilön saa poistaa aina; vastaavien lapsiyksilöiden viiteavaimiin viedään NULLarvo - vanhempiyksilön saa poistaa aina; vastaavien lapsiyksilöiden viiteavaimiin viedään ennalta määrätty alkuarvo; - vanhempiyksilön saa poistaa vain, jos tietyt ehdot ovat voimassa - vanhempiyksilön saa poistaa aina; ei mitään tarkistuksia lapsiyksilöiden suhteen; NULLarvo merkitsee puuttuvaa, ei tiedossa olevaa arvoa. Se EI ole sama kuin tyhjä tai nolla. Ominaisuustyypit: Avaimiin sisältyvät ominaisuustyypit on tässä vaiheessa jo löydetty ja uusien yksilötyyppien luominen voi olla tarpeen. Johdetut ominaisuustyypit: arvot saadaan johtamalla ne tavalla tai toisella muiden ominaisuustyyppien arvoista. Kysymys kuuluu, että onko mahdollista yhdistää yksilötyyppejä toisiinsa->käsitemallin tarkistus? Muut eheyssäännöt ja arvoaluemäärittelyt: Arvoaluemäärittelyt (domains) ja muut ominaisuustyppien eheyssäännöt (triggering operations): Ominaisuustyyppien kelvollisten arvojen joukkoa kutsutaan sen arvoalueeksi: pituus, muoto, vaihteluväli, yksikäsitteisyys, NULL-arvon salliminen ja mahdollinen alkuarvo. Arvoaluemäärittelyt on tehtävä myös avaimille. Perusavain eikä sen osaa saa saada NULL-arvoa, toisioavaimet voivat saada NULL-arvon. Käsiteanalyysin tulokset ja tietohakemisto: Käsiteanalyysiä tehdessä syntyy sekä käsitekaavioita että sanallisia tietokuvauksia. Tietokuvaukset kootaan tietohakemistoon. Tietohakemisto sisältää siis metadataa, tietoa datasta. Täydellisimmillään tietohakemistoon sisällytetään kaikki toimintayksikön tiedot sovelluksista, 13 tietokannoista, loogisista malleista, käyttäjistä ja hakukriteereistä: se sisältää tietokannan sisäisen, käsitteellisen ja ulkoisen tason kaaviot sekä näiden väliset kuvaukset. Käsiteanalyysin aikana tietohakemistoon liitetään määrittelyt yksilötyypeistä, yhteystyypeistä, ominaisuustyypeistä ja eheyssäännöistä. Automaattinen tietohakemisto voi olla joko sisäänrakennettu osa tietokannan hallintajärjestelmää ja siihen liittyvää kehitintä tai tietokannan hallintajärjestelmän tukema sovellus. Relaatiotietokannoissa on yleinen tapa tallettaa tkhj:ään sisältyvä tietohakemisto tauluina, joita voi käyttää samalla tavalla kuin tietokannan muita tauluja. Relaatioalgebran perusoperaatiot Relaatiotietokantojen matemaattinen perusta on relaatioalgebra. Relaatioalgebran muutamaa perusoperaatiota tarvitaan mm tietokannan normalisoinnissa. Relaatioalgebraan perustuu myös. esim. SQL-kyselyjen optimointi. Liitos eli Join Liitoksessa yhdistetään kaksi taulua uudeksi tauluksi jonkin avaimen perusteella tässä esimerkissä piirin tunnuksen perusteella. Uudessa taulussa on sarakkeita yhteensä sama määrä kuin alkuperäisissä yhteensä - 1 ja rivien määrä on sama kuin siinä taulussa, jossa rivejä oli enemmän. Myyjätaulu Myyjänro M1 M2 M3 M4 Mynimi Pirkko Maija Kalle Saku Piiritaulu Pnro P1 P2 MPnro P1 P2 P2 P1 Myyjätaulu join Piiritaulu Myyjänro Mynimi M1 Pirkko M2 Maija M3 Kalle M4 Saku MPnro P1 P2 P2 P1 Pnimi Länsi Itä Pnimi Länsi Itä Itä Länsi Edellä oleva liitos on "inner join". Siinä uudessa taulussa on vain sellaisia rivejä, joiden tiedot löytyvät molemmista tauluista. Jos piiritaulussa olisi rivi, jossa pnro=3 ja Pnimi=Etelä, ei tämän rivin tietoja näkyisi ollenkaan liitostaulussa. "Outer join" on liitos, jossa jommasta kummasta taulusta tuodaan uuteen liitostauluun myös sellaisia rivejä, joille ei löydy vastinparia toisesta taulusta. 14 Yhdiste eli union Yhdiste tarkoittaa sitä, että kaksi samanlaista taulua (samanlaiset sarakkeet) yhdistetään uudeksi tauluksi, jolloin rivien määrä on sama kuin kahdessa alkuperäisessä yhteensä - ne rivit, jotka olivat identtisiä. Piiri1 Mnro M1 M4 Mnimi Pirkko Saku MPnro P1 P1 Piiri1 union Piiri2 Mnro Mnimi M1 Pirkko M2 Maija M3 Kalle M4 Saku MPnro P1 P2 P3 P1 Piiri2 Mnro M2 M3 Mnimi Maija Kalle MPnro P2 P3 Valinta (selection) Jostain taulusta valitaan uuteen tauluun vain tietyt rivit esim Sql:n avulla ilmaistuna: Select * from myyja where nimi like "M*" valinta myyjätaulusta Mnro Mnimi M2 Maija MPnro P2 Projektio Jostain taulusta valitaan uuteen tauluun vain tietyt sarakkeet. Tätä operaatiota käytetään varsin usein tietokannan normalisoinnissa. Projektio(Mnro,MPnro) myyjätaulusta Mnro MPnro M1 P1 M2 P2 M3 P2 M4 P1 15 Tietokannan suunnittelu- ja toteutusprosessi Ohjelmistotuotantoprojekteissa käytetään yleisesti erilaisia vaihejakomalleja, jotka jäsentävät kehitystyön määrittely-, suunnittelu-, toteutus- ja käyttöönottovaiheisiin. Näitä malleja ovat mm EVO-malli ja vesiputousmalli. Näissä vaihejakomalleissa useimmiten näkökulmana ovat käyttäjän toiminnot tai prosessit. Jos sovellusalue on voimakkaasti rekisteri- tai kortistotyyppinen, saattaa vaiheistus olla toisenlainen tai ainakin määrittelyvaiheen jälkeen eriytetään tietokannan suunnittelu, toteutus- ja käyttöönotto omaksi (osa)projektikseen.Tietokantaprojektin vaihejakomalli voisi olla seuraavanlainen (kuva 4 alla). Reaalimaailman mallinnus Relaatiomallin määrittely Käyttöliittymän suunnittelu Tietokannan määrittely Tietokannan tekninen toteutus Käyttöliittymän toteutus Sovelluksen testaus Tietokannan suunnittelun vaiheet Vaatimusten määrittely ja analyysi Haastatteluin, kirjalliseen materiaaliin tutustumalla ja keskusteluin selvitetään järjestelmältä vaadittavat ominaisuudet. Käsitteellinen mallintaminen Tietokantasuunnittelun alussa on tehtävä päätös siitä, minkä mallin mukaan (relaatiomalli, verkkomalli, hierarkkinen malli) edetään.On myös päätettävä, mikä tiedonhallintajärjestelmä valitaan käyttöön. Laaditaan käsitekaava, joka kuvaa tietokannan sisällön ja rakenteen. Tehdään joko käsiteanalyysina tai oliomallinnuksena. Ensimmäisenä vaiheena on reaalimaailman mallinnus, jossa suunnittelija yhdessä käyttäjien kanssa kuvaa sovellusalueen kannalta keskeiset objektit, niiden ominaisuudet ja objektien väliset suhteet. Tätä vaihetta kuvataan ER-mallinnuskohdassa. Mallinnus tehdään usein graafisilla menetelmillä (kuten ER-mallinnus), jotta käyttäjä voisi osallistua suunnitteluprosessiin. Mallinnuksen jälkeen malli muutetaan relaatiomalliksi (tai oliomalliksi, jos tullaan käyttämään oliotietokantaa). Tässä vaiheessa mietitään relaatiomallin loogista rakenneta (eikä vielä fyysistä 16 toteutusta). Relaatiomallin pohjalta määritellään tietokannan taulut, taulujen väliset suhteet ja taulujen tiedot (tietojen ominaisuudet). Tämän vaiheen jälkeen tietokantaan jo voi syöttää tietoja joillakin tietokannan omilla työvälineillä, vaikka tietokannan käyttöliittymiä varsinaisesti ei olisi olemassa. Lyhyesti vaihe sisältää sen, että ensin muutetaan semanttinen käsitemalli tietokantamallin mukaiseksi rakenteeksi. Tehtävä- ja transaktiosuunnittelu Mallinnetaan tehtävät ja transaktiot, joilla tietokannan tietoja käytetään. Tietokannan suunnittelun ja toteutuksen kanssa rinnan etenee käyttöliittymän suunnittelu ja toteutus. Siinä projektissa suunnitellaan ja toteutetaan mm. tietojen ylläpitoon (lisäykset, muutokset, poistot), tietojen kyselyihin ja tietojen raportointiin liittyvät ohjelmat. Monissa tietokantaohjelmissa ja myös sovelluskehittimissä on välineitä, joiden avulla saadaan "ilman ohjelmointia" aikaan valikoita, syöttölomakkeita, kyselylomakkeita ja raportteja. Näiden avulla voidaan käyttäjille "demota" tietokantaa jo suunnitteluvaiheessa, jotta voidaan mahdollisimman aikaisin korjata mallinnuksen tai suunnittelun aikana tehdyt virheet tai väärinymmärrykset. Suunnitellaan sovelluksen rakenne ja sovellukseen kuuluvien näyttöjen sisältö ja rakenne. Lopuksi toteutetaan tietokannan looginen suunnittelu Käsitekaavan pohjalta laaditaan sisällöstä ja rakenteesta relaatiokaava käytettävissä olevalla DDL:llä (Data Definition Language). Kiinnitetään käytettävä arkkitehtuuri, muodostetaan komponentteja ja määritellään ne. Fyysinen suunnittelu: päätetään tietokannan tallennusrakenteista ja saantimenetelmistä. Tarkoituksena on tuottaa suorituskyvyn ja muistitilan käytön suhteen optimaalinen fyysinen rakenne tietokannalle. Toteutetaan edellisten osien suunnitelmat ohjelmointikielillä ja testataan toteutuksen toimivuus. Tietokannan tekniseen toteutukseen ei yleensä juuri mikrotietokoneissa tarvitse kiinnittää huomiota, mutta suuremmissa tietokannoissa on tietokannan suorituskyvyn kannalta runsaasti "virittelemistä" vaativia asioita, jotka liittyvät mm indeksitauluihin, loki-tiedostoihin, lukitsemiskäytäntöihin ja tietokannan sijoittamiseen levyille. Viritetään tietokantamäärittelyt ottasen siis huomioon oman tietokannan hallintajärjestelmän ominaisuudet. Käsitemallin muuttaminen relaatiorakenteeksi Jokainen käsitemallin osa vuorollaan muutetaan relaatiomallin mukaiseksi. Relaatiomalli käsittää osat tietorakenne ja tietoeheys. Loogisessa tietomallissa puhutaan yksilötyypeistä, yhteystyypeistä ja ominaisuustyypeistä; relaatiomallissa nämä rakenteet kuvataan määrittelemällä relaatiotauluja ja niiden sarakkeita eli attribuutteja. Loogisen tietomallin eheysominaisuudet muutetaan relaatiomallin mukaisiksi mm. lisäämällä sääntöparametrejä taulujen määrittelyihin tai luomalla yksikäsitteisiä indeksejä, makroja, ohjelmia jne. Tietokantasuunnittelun tuloksena saadaan tietokantakaava, joka noudattelee loogisen käsitemallin kaikkia osasia. Relaatiotietokantajärjestelmät eivät kuitenkaan ole täydellisiä ja eivät siten toteuta kaikkia niitä vaatimuksia, mitä tietosuuntautunut suunnittelu niiltä edellyttää, joten viritykset on tehtävä. Käsitemallin muuttaminen relaatiorakenteeksi: Askel 1: Taulujen määrittely Askel 2: sarakkeiden määrittely Askel 3: Tietorakenteen sopeuttaminen tuotantoympäristöön Askel 4: Yksilötyyppien eheyssääntöjen käsittely Askel 5: Yhteystyyppien eheyssääntöjen käsittely Askel 6: Muiden eheyssääntöjen käsittely 17 Askel 1: Taulujen määrittely Jokaista käsitemallin yksilötyyppiä kohden määritellään relaatiotaulu. Taulut nimetään ja kirjataan yhteys yksilötyypin ja taulun välillä. Määrittelyt kuvataan yleensä tietokannan hallintajärjestelmän tiedonmäärittelykielellä (esim. Oraclessa SQL-kieli): CREATE TABLE asiakas ... Askel 2: Sarakkeiden määrittely Jokaiseen tauluun määritellään sarakkeet: jokaista yksilötyypin ominaisuustyyppiä kohti määritellään vastaavaan relaatiotauluun sarake. Yksilötyyppien väliset yhteydet siirtyvät tässä vaiheessa automaattisesti relaatiorakenteeseen, koska käsitemalli rakennettiin niin, että se sisältää viiteavaimissaan yhteystyypin sisältämän yhteyden. Relaatiomalli kuvaa yhteyksiä viiteavaimia vastaavilla sarakkeilla. Ominaisuustyyppejä EI PIDÄ YHDISTÄÄ yhdeksi sarakkeeksi. CREATE TABLE asiakas (haaraosasto … numero… nimi… osoite tilikoodi…) Askel 3: Tietorakenteen sopeuttaminen tuotantoympäristöön Rakenne mukautetaan nyt tietyn TKHJ:n mukaiseksi: Valitaan sarakkeiden talletusjärjestys taulut tallennetaan muistiin (perusalueen varaus ja varatila) taulujen sijoittaminen tietokantoihin (1-n kpl) tietokannan lukitusparametrien asettaminen: lukitus on mekanismi, jolla TKHJ kontrolloi tietoeheyttä saman tiedon yhtäaikaisten hakujen aikana. Lukittavan tiedon määrä on määriteltävä; lukitaanko useita taulujam yksi taulu vai tietty taulun osa. Lukon laatu ja lukituksen kestoaika. Askel 4: Yksilötyyppien eheyssääntöjen käsittely Yksilötyyppejä koskevat eheyssäännöt ovat perusavaimen ja toisioavaimen eheyssäännöt. Perusavaimen eheysominaisuudet (yksikäsitteisyys, minimaalisuus (eli mikään perusavaimen osa ei saa olla yksikäsitteinen), pakollisuusvaatimus) liitetään tietokantakaavaan. CREATE TABLE asiakas (haaraosasto … numero… nimi… osoite tilikoodi… PRIMARY KEY (haaraosasto, numero)) arvoaluetekniikka vastaavasti toisioavaimen eheyssäännöt 18 Askel 5: Yhteystyyppien eheyssääntöjen käsittely Lisäys ja poistosäännöt koskevat perusavaimien ja viiteavaimien välisiä suhteita ja tukevat näin ollen tietokannan viiteeheyttä. CREATE TABLE lasku (numero … as * haaraosasto… as * numero… maara... PRIMARY KEY (numero) FOREIGN KEY (as *haaraosasto, as *numero) References asiakas) viiteavain (as * haaraosasto, as *numero) viittaa asiakas-vanhempitaulun perusavaimeen Askel 6: Muiden eheyssääntöjen käsittely Arvoaluemäärittelyt säännöt, jotka koskevat lisäysten, poistojen ja muutosten vaikutusta muihin yksilötyyppeihin tai saman yksilötyypin muihin ominaisuustyyppeihin. Viritys Tietokannan viritysvaiheessa tarkastellaan tietyn TKHJ:n mahdollisuuksia toteuttaa suunniteltu tietokanta mahdollisimman tehokkaasti, sekä tutkitaan millaista räätälöintiä kyseisen TKHJ:n käyttö aiheuttaa käsitemalliin ja tietokantakaavaan. Virityskeinoista suosituimpia ovat erilaisten hakumekanismien luonti, koska ne ovat käyttäjälle näkymättömiä: selaus: tutkitaan peräkkäisesti rivejä, jotta haluttu tieto löytyy ryvästys (clustering): rivit talletaan lajiteltuina joidenkin kenttien mukaan hajautus: käytetään algoritmia tiedon osoitteen laskemiseen indeksointi: luodaan tietokantaan erillisiä indeksirakenteita, joita käytetään hyväksi tietohaussa. Indeksit on mahdollista myös luoda jälkeenpäin. Viritystä voidaan kohdistaa myös tietorakenteeseen. Viritys tietorakenteeseen: Taulujen ja sarakkeiden uudelleen määrittely eli denormalisointi tiedon toistaminen sarakkeen uudelleen määrittely taulujen uudelleen määrittely suositus: normalisoidaan tietokanta kolmanteen normaalimuotoon ja vasta viritysvaiheessa tehdään mahdolliset muutokset. 19 Alla on esitetty esimerkki tietohakemistosta Henkilö Ominaisuus Tietotyyppi Sisältörajoitteet ja -tarkistukset email sotu CHAR(11) etunimi VARCHAR(32) sukunimi VARCHAR(64) kotisivu VARCHAR(128) pitää alkaa http:// puh VARCHAR(32) fax VARCHAR(32) katuosoite VARCHAR(64) VARCHAR(64) Pitää löytyä @-merkki Sallitaan myös pelkkä syntymäaika postitoimipaikka VARCHAR(64) postinro Paikkakunta Ominaisuus CHAR(5) Aina viisi merkkiä PID AUTOINCREMENT Oppilaitos VARCHAR(128) email VARCHAR(64) pitää löytyä @-merkki kotisivu VARCHAR(128) pitää alkaa http:// puh VARCHAR(32) fax VARCHAR(32) katuosoite VARCHAR(64) Tietotyyppi Sisältörajoitteet ja -tarkistukset postitoimipaikka VARCHAR(64) postinro CHAR(5) Aina viisi merkkiä Postituslista VARCHAR(64) Pitää löytyä @-merkki Tyyppi Ominaisuus Tietotyyppi Sisältörajoitteet ja -tarkistukset TyyppiID AUTOINCREMENT Tyyppinimi VARCHAR(64) Harjoitustyö Ominaisuus Tietotyyppi Sisältörajoitteet ja -tarkistukset email INTEGER koodi INTEGER TyoNro URL SMALLINT VARCHAR(128) Pitää alkaa http:// Aihe VARCHAR(128) Pvm DATE Bonus Formaatti DOUBLE Arvot alkavat ykkösestä jokaisella kurssilla Ei sallita negatiivisia arvoja. Oletusarvo on nolla. 20 Ominaisuus Tietotyyppi Sisältörajoitteet ja -tarkistukset FID AUTOINCREMENT Tiedostopaate VARCHAR(3) Tiedostomuoto VARCHAR(64) Kurssi Ominaisuus Tietotyyppi Sisältörajoitteet ja -tarkistukset Koodi Nimi VARCHAR(64) OV DOUBLE Kotisivu VARCHAR(128) Pitää alkaa http:// CHAR(6) htlkm Arvosanat Ominaisuus Tietotyyppi SarjaID Aina kuusi merkkiä Sallitaan kokonaisluvut ja puolikkaat SMALLINT Sisältörajoitteet ja -tarkistukset INTEGER Pistemaara DOUBLE Arvosana VARCHAR(50) Arvosana voi olla sanallinen esim. Hylätty Tentti Ominaisuus Tietotyyppi Sisältörajoitteet ja -tarkistukset AUTOINCREMENT TenttiID Pvm DATE Suoritus Ominaisuus Tietotyyppi Sisältörajoitteet ja -tarkistukset email INTEGER TID INTEGER Nro SMALLINT Pisteet DOUBLE Tilaa Ominaisuus Tietotyyppi Toimituspvm DATE Tilauspvm DATE Toim.os VARCHAR(50) Sisältörajoitteet ja -tarkistukset 21 Alla on esitetty esimerkkejä ER-mallinnuksesta ER-mallinnus on graafinen kuvaustapa. Se on helposti ymmärrettävää ja sopii hyvin tietokannan suunnittelijan ja käyttäjän yhteistyössä suorittamaan reaalimaailman mallintamiseen ja käsitteiden analysoimiseen. Lisäksi ER-mallinnuksella tuotetut kaaviot tuottavat 'automaattisesti' hyvin relaatiotietokantoihin sopivat määrittelyt. Sinällään ER-kaavioita voitaisiin käyttää myös oliotietokantojen määrittelyjen pohjana, mutta jos tiedossa on, että toteutus tapahtuu oliotietokantaan, niin kannattanee käyttää mieluimmin OMT –mallinnusta (object modelling technique). Kuva 4 alkupvm loppupvm hetu nimi autot omista minen henkilöt osoite Esimerkki 1 On autoja ja henkilöitä, joita kuvataan suorakaiteella. Suorakaide kuvaa yksilötyyppiä (entity). Oliomallinnuksessa käytetään termiä olio (objekti). Suomen kielessä ei yleensä tehdä eroa yksilötyypin ja yksilön välillä. Periaatteessa kuitenkin ero on olemassa eli yksilö tarkoittaa esimerkiksi tiettyä henkilöä, mutta yksilötyyppi ei tarkoita ketään tiettyä henkilöä, vaan henkilöä käsitteenä. Vinoneliö tai timantti on yhteystyyppi (riippuvuus, relationship) kahden yksilötyypin välillä. Sekä yksilötyyppeihin että yhteystyyppeihin voi liittyä ominaisuuksia (attribuutit) tai oikeastaan ominaisuustyyppejä. Ominaisuuksia kuvataan ellipseillä. Esimerkissä henkilöillä on ominaisuudet: hetu, nimi ja osoite sekä omistamisella on ominaisuudet: alkupvm ja loppupvm. Ominaisuus nimeltä hetu on alleviivattu, koska se on henkilön identifiointitieto (perusavain). Samankin reaalimaailman tilanteen voi nähdä monella tavalla. Esimerkiksi avioliitto voisi olla kahden henkilön välinen yhteys taikka avioliitto voi olla oma yksilötyyppinsä. ER-kaaviossa voidaan esittää myöskin lukumääräsuhteet. Vaihtoehtoja on yksi liittyy yhteen yksi liittyy moneen moni liittyy moneen Edellä olleessa esimerkissä voisi olla esim. niin, että yksi ihminen voi omistaa monta autoa, mutta yhdellä autolla voi olla vain yksi omistaja. Lukumääräsuhteiden kuvaamiseen on useampia eri tapoja, joista käytetyimpiä ovat seuraavat: 22 nuolet: - yhden suhde moneen Jos on yksilöt E ja F ja kutakin E:ssä oleva yksilöä vastaa täsmälleen yksi F, niin nuoli osoittaa F:ää eli ylläolevassa esimerkissä nuolen kärki osoittaisi henkilöä. - yhden suhde yhteen (nuolet kärjet molempiin) monen suhde moneen (ei ollenkaan nuolen kärkiä), joskus käytetään kaksoiskärkeä osoittamaan suhdetta moneen suhdeluvut: - nuolien tai viivojen päällä luvut 1:1 tai 1:n tai n:1 ER-mallinnuksessa merkitään yksilön perusavain alleviivaamalla ko ominaisuus. Avaimen pitää olla yksikäsitteinen (sitten oikeassa tietokannassa). Kun esim "Tuntemattomasta Sotilaasta" on kaksi eri elokuvaa, niin avaimeksi ei riitä pelkästään elokuvan nimi (koska se ei vielä kerro, kummasta elokuvasta on kysymys), vaan avain voi olla useamman ominaisuuden yhdistelmä esim nimi ja vuosiluku (elokuvaesimerkissä) Jokin yhteys voi olla useamman kuin kahden yksilön välinen. Esim jossain sopimuksissa voisi olla useampia sopijapuolia eli sopimus on yhteys, joka on kytketty moneen yksilöön. Tämä voidaan purkaa binääririippuvuuksiksi (siis kahden välisiksi) niin, että tehdään sopimuksesta yksilö, johon kytketään yhteydet ostaja, myyjä, todistaja ja takaaja. Yleensä tietokannoissa ei myöskään yhteyksillä olla ominaisuuksia vaikka ER-mallinnuksessa voi olla. Itse asiassa kun ER-kaavio muutetaan relaatiomalliksi, niin sekä yksilötyypeistä että yhteystyypeistä tulee tietokannan tauluja, joissa sarakkeet vastaavat ER-mallin ominaisuuksia. ERmallinnusvaiheessa ei ole mitään syytä pyrkiä siihen, että Toisinaan voi käydä niin, että on vain yksi yksilötyyppi (esim ihmiset) ja yhteystyyppi (esim avioliitto), joka kytkeytyy kahteen kertaan yksilötyyppiin (eli mies ja vaimo). Silloin näihin nuoliin voi laittaa nimiksi esim vaimo_ihminen ja mies_ihminen, mikä ihmisen "roolia" ko avioliitossa. 23 Saman reaalimaailman ilmiön voi kuvata monella tavalla. Edellä olleen esimerkin henkilöt-autot voi kuvata myös hienojakoisemmin. Tarkkuus ja kuvaustapa riippuvat kulloisestakin sovellusalueesta ja käyttäjien tarpeista. Kuva 5 ostaja autot kohde myynti myyjä henkilöt ostaja kohde osto myyjä Etenkin oliomallinnuksessa puhutaan usein luokista ja aliluokista. Myös ER-mallinnuksessa voidaan muodostaa luokkia ja aliluokkia. Asiaa voinee parhaiten selittää esimerkin avulla. Otetaanpa yksilötyyppi auto. Autoon voi liittyä monia ominaisuuksia esim moottorin tilavuus, käyttöönottovuosi, merkki ja malli. On kuitenkin olemassa henkilöautoja, kuorma-autoja ja linjaautoja. Näistä kaikista on tarpeen tallettaa tietoja, henkilöautoista istumapaikat etupenkillä ja takapenkillä, kuorma-autoista lastitilan koko kuutioina ja linja-autoista istumapaikkojen ja seisomapaikkojen määrä. Tämä tilanne voidaan ER-mallinnuksessa hoitaa seuraavan esimerkin mukaisesti: 24 merkki Kuva 6 rekno auto isa isa isa kauto hauto hauto bussi istumapaik Henk edessä Pyörien lkm seisomapaikk Henk takana Autojen "yhteiset" ominaisuudet liitetään yksilöön auto ja kuhunkin aliluokkaan liitetään ko aliluokan ominaisuudet. Avaimena voi toimia kaikissa yksilötyypeissä kuitenkin rekisterinumero. ER-mallintamisen peruskäsitteet Kohdetyypit (entity types): tunnistettavissa oleva asia tai tapahtuma Helposti havaittavia kohdetyyppejä ovat käyttäjien puheissa esiintyvät henkilöt, esineet, tilat ja tuotteet. Hankalampia ovat käsitteelliset kohdetyypit kuten tilaus tai sopimus. Kohdetyypit ovat sellaisia, joista halutaan tallettaa tietoja pysyvästi tietokantaan. Raportit ja tulosteet eivät ole kohdetyyppejä vaan tietokannan tiedoista johdettuja tulostietoja heikko tyyppi (weak entity type). Olemassaolo riippuu toisesta kohteesta eli ei voi olla olemassa jos tätä toista kohdetta ei ole myös olemassa. Esim. tenttitulosta ei voi olla olemassa ilman tenttijää. Suhdetyypit (relationship types): vähintään kahden kohteen välillä vallitseva riippuvuus. Suhde voi merkitä olemassaoloa, toiminnallista suhdetta tai tapahtumaa. Suhteen aste määräytyy suhteeseen liittyvien kohteiden lukumäärän mukaan. Jos jokaista suhteeseen liittyvää kohdetta A vastaa vähintään yksi kohde B on kyseessä täysi suhde (pakollinen suhde) muussa tapauksessa osittainen suhde suhdeen kardinaalisuus (cardinality): yhden suhde yhteen (one-to-one, 1-to-1) yhden suhde moneen (one-to-many, 1-to-M) (monen suhde yhteen (many-to-one, M-to-1)) monen suhden moneen (many-to-many, M-to-M) ominaisuudet (properties, attributes) jokaisella samantyyppisellä kohteella on tiettyjä yhteisiä ominaisuuksia opiskelijoilla on kaikilla nimi, sotu, osoite yms 25 Ominaisuuksien joukosta valitaan avaimeksi sopivat Avaimen pitää olla yksilöivä, uniikki Jokainen ominaisuus saa arvonsa (value) tietystä arvojoukosta (domain) ominaisuudet voivat olla koottuja useasta osasta tai yksittäisiä. Nimi voi koostua etu- ja sukunimestä. Ominaisuus voi olla yksi- tai moniarvoinen Sallitaanko ominaisuuksille tyhjät arvot Sallitaaanko tuntemattot arvot (NULL) Ominaisuudet voivat olla johdettuja esim. tilausten kokonaislukumäärä lasketaan yksittäistilausten kappalemääristä. Alityypit perintä Jokainen kohde on vähintään yhtä kohdetyyppiä mutta voi olla samaan aikaan useampaakin ohjelmoija on on työntekijä eli ohjelmoija on alityyppi työntekijän ollessä ylityyppi ohjelmoijalla on kaikki työntekijän ominaisuudet mutta ei päinvastoin tyyppihierarkia ER-diagrammit - Kohteet: Jokainen kohde esitetään suorakulmiona jonka sisällä lukee kyseisen kohteen kohdetyyppi. Heikoilla kohdetyypeillä suorakulmion kehä kaksinkertaistetaan. - Ominaisuudet esitetään ellipseillä jotka on liitetty jatkuvalla viivalla kohteeseen tai suhteeseen. Ellipsin sisällä lukee ominaisuuden nimi. - Perityt ominaisuudet liitetään katkoviivalla - Moniarvoiset ominaisuudet liitetään kaksinkertaisella viivalla -Koottujen ominaisuuksien osaset esitetään kukin omana ellipsinään jotka liitetään jatkuvilla viivoilla koostettuun ominaisuuteen. - Avaimina toimivat ominaisuudet alleviivataan. Suhteet: Jokainen suhde esitetään timanttikuviona jonka sisällä lukee suhteen nimi. Jos suhde on heikon kohteen ja "vahvan" kohteen välillä niin timanttikuvion kehä kaksinkertaistetaan. Suhteeseen liittyvät kohteet liitetään siihen jatkuvalla viivalla joista jokaisen kohdalla lukee 1 tai M riippuen siitä onko kyseessä yhden suhde yhteen, yhden suhde moneen vai monen suhde moneen. Suhteen ja kohteen välinen viiva kaksinkertaistetaan jos kyseessä täysi suhde alityypit: alityyppi yhdistetään ylityyppiin yhtenäisellä viivalla jonka toisessa päässä on nuoli (ylityypin päässä). 26 ER-kaaviosta relaatiomalliksi: esimerkkejä Edellä esitetystä ER-esimerkistä 1 (autot-henkilöt) on tehty seuraavat neljä relaatioratkaisua. Mikä tai mitkä niistä ovat mielestänne hyviä ja mitkä huonoja ja miksi ? henkilöt autot omistami nen vaihtoehto 1 henkilot hetu nimi 12345 Ojala Ville 34567 Mattila Kai 67899 Simola Olli osoite Kaivokatu 6 Ojakuja 3 Ojatie 15 vaihtoehto 2 henkilot hetu nimi osoite 12345 Ojala Kaivokatu Ville 6 34567 Mattila Ojakuja 3 Kai 67899 Simola Ojatie 15 Olli 12345 Ojala Kaivokatu Ville 6 34567 Mattila Ojakuja 3 Kai vaihtoehto 3 henkilot hetu nimi osoite 12345 Ojala Kaivokatu Ville 6 34567 Mattila Ojakuja 3 Kai 67899 Simola Ojatie 15 Olli autot rekno merkki SYR-456 Volvo hetu 12345 ABC-345 Saab 12345 VCX-765 Saab 34567 UIO-665 Ford IOP-876 BMW 34567 67899 rekno SYR-456 autot rekno merkki SYR-456 Volvo UIO-665 ABC-345 Saab IOP-876 VCX-765 Saab ABC-345 UIO-665 Ford UIO-665 IOP-876 BMW omistaminen hetu rekno 12345 SYR-456 autot rekno 12345 ABC-345 SYR-456 Volvo 34567 VCX-765 ABC-345 Saab 34567 67899 UIO-665 IOP-876 VCX-765 Saab UIO-665 Ford IOP-876 BMW merkki erilaista 27 vaihtoehto 4 rekno merkki rekpvm hetu SYR-456 Volvo 12.3.1996 12345 ABC-345 Saab VCX-765 Saab 11.12.199 12345 1 3.6.1984 34567 UIO-665 Ford 1.1.1994 IOP-876 BMW 12.12.199 67899 7 34567 nimi Ojala Ville Ojala Ville Mattila Kai Mattila Kai Simola Olli osoite Kaivokatu 6 Kaivokatu 6 Ojakuja 3 Ojakuja 3 Ojatie 15 ER-mallista relaatioiksi -säännöt - yksilötyypistä tulee relaatio eli taulu ja kaikista yksilötyypin ominaisuuksista tulee relaation sarakkeita - yhteystyypistä tulee myös relaatio, jonka tietoja yhteystyypin omat ominaisuudet ja lisäksi vielä yhteysviivojen päissä olevien yksilöiden avaimet - isa-yhteystyypeistä ei tehdä relaatioita Tämä säännöstö tuottaa hyviä relaatioratkaisuja, joskin 1:n tai n:1 yhteystyypeistä ei välttämättä aina tarvitsi tehdä tauluja (ellei haluta varautua siihen, että yhteystyyppi joskus saattaakin olla tyyppiä n:n esim yksi ihminen voi omistaa monta autoa ja yhdellä autolla voi olla monta omistajaa). Relaatiotietokannan mallia (Schema) ei useinkaan tekstissä kuvata taulukoina, vaan lyhyemmin seuraavasti: HENK(hetu, sukunimi, etunimi, lähiosoite, postinro, postitoimipaikka) AUTO(rekno, merkki,malli, kottovuosi) OMISTAJA(hetu,rekno) Jokaisesta taulusta on yksi rivi, jossa on taulun nimi ja taulussa olevat tiedot avainkenttä alleviivattuna. Sama voidaan kuvata myös yksityiskohtaisemmin seuraavasti: HENK ( hetu, string sukunimi, string etunimi, string lähiosoite, string postinro, integer postitoimipaikka, integer) 28 Tietokannan normalisointi Tietokannan mallin pitäisi vastata todellisuutta ja käyttäjän tarpeita. Tietokannassa ei saa olla redundanssia (päällekkäisyyttä) tiedoissa, muuta kuin tietysti välttämättömien linkkitietojen verran. Redundanssi aiheuttaa mm ylimääräistä tietojen tallentamistyötä ja myös helposti virheitä, kun muutokset tehdään johonkin paikkaan, mutta unohdetaan tehdä samaan tietoon jossain muussa kohden tietokantaa. Tietokannan pitäisi olla sellainen, että kun tietoja muutetaan, poistetaan tai lisätään, niin kaikki tehdään vain yhteen kertaan ja yhteen paikkaan eikä muutos saa aiheuttaa ristiriitatilanteita eikä tuhota tarpeellisia tietoja. Hakeminen vaatii enemmän tehoa kuin normalisoimattomassa ratkaisussa koska tiedot joudutaan hakemaan useammasta relaatiosta Normaalimuodot syntyvät suhteellisen automaattisesti jos noudatetaan seuraavia sääntöjä: Kohteen yhteyteen talletetaan vain kohteeseen välittömästi liittyviä tietoja ja kunkin tiedon päivitys tapahtuu vain yhteen paikkaan. ER-mallin perusteella tehty relaatiomalli on yleensä automaattisesti hyvä. Jos tietokanta tehdään "korvakuulolta" esim. vanhan excel-taulukon pohjalta, siinä on varsin todennäköisesti hyvin paljon redundanssia (samoja tietoja moneen kertaan). Tietokantaa lähdetään nyt muodostamaan analyysivaiheen tulosten pohjalta tietyn tietokantamallinrelaatiomallin, verkkomallin tai hierarkkisen mallin- mukaiseksi. Tässä vaiheessa otetaan huomioon myös sen tietokannan hallintajärjestelmän ominaisuudet, jolla tietokanta aiotaan toteuttaa. Relaatiotietokantaa käytettäessä johdetaan taulujen määrittelyt käsitemallista sen jälkeen mukautetaan tietorakenne valittuun tietokannan hallintajärjestelmään ja kuvataan sen sisältämällä tietomäärittelykielellä. Myös tietokannan eheysominaisuudet liitetään tietokantamäärittelyyn. Tietokannan virityksellä tarkoitetaan tietokannan suunnitteluvaiheen lopussa tapahtuvaa rakenteen hienosäätöä, jonka tarkoituksena on tehdä tietokanta mahdollisimman suorituskykyiseksi (erilaisten talletusrakenteiden edut ja hakumenetelmien suomat edut tai denormalisointi). Viritystoimien jälkeen tehdään joukko muita tietokantaa koskevia suunnittelutehtäviä, ennen kuin tietokanta voidaan ottaa käyttöön: tietokannan fyysisen ulkoisen tason näkymien määrittelyt ja käyttöoikeuksien määrittelyt sekä fyysisen tason suunnittelun loppuunsaattaminen ohjelmien suunnittelu ja toteutus. Normalisoitu käsitemalli Normalisointitarkistuksessa tietorakennetta kehitetään niin, että se täyttää tietyt kriteerit. Normalisointitarkistus käsittää useita askeleita, joiden mukaan looginen tietomalli johdetaan toivotun mukaiseksi rakenteeksi. Normalisointiaskelelten tuloksia kutsutaan normaalimuodoiksi. Yleensä normalisoidaan kolmanteen normaalimuotoon asti. Analysointivaiheen tuloksena syntyy looginen tietokannan kuvaus- täydennetty, normalisoitu käsitemalli, joka toimii lähtökohtana seuraavalle vaiheelle, tietokannan suunnittelulle. Mallissa tiedot on loogisesti integroitu siten, että tarpeetonta tietojen päällekkäisyyttä ei esiinny. Kun käsitemalli on tarkistettu ja todettu tai muutettu halutun normaalimuodon mukaiseksi, on analyysivaihe saatettu päätökseen. Tämän jälkeen alkaa suunnitteluvaihe, joka käsittää sekä tietokantasuunnittelun että ohjelmistosuunnittelun. Normalisoinnilla muutetaan siis tietokannan rakennetta asteittain. Se aloitetaan attribuuttimäärittelyistä (vastaa ominaisuustyyppiä) tai mielivaltaisista relaatio (taulukko-) määrittelyistä (vastaa yksilötyyppiä) ja siinä käytetään hyväksi semanttista tietoa (tietojen funktionaalisia riippuvuuksia), jotta lopputulokseksi saataisiin tietyt laatukriteerit täyttävät relaatiot. Relaatioiden muokkaus tapahtuu askel askeleelta. Askeleita kutsutaan normaalimuodoiksi. 29 Normaalimuotoja on kolme: 1NM, 2NM ja 3NM. Myöhemmin niitä on kehitetty lisää: BCNM, 4NM ja 5NM. Normaalimuodot on määritelty niin, että aina yleisemmässä normaalimuodossa oleva relaatio on myös kaikissa sitä alemmissa normaalimuodoissa. Normalisointitarkastus perustuu ominaisuustyyppien välisille riippuvuuksille, jonka lähdemateriaalina on käsitemalli. Uusia yksilötyyppejä saattaa syntyä ja entiset voivat pilkkoontua pienemmiksi. Yksilötyyppiin jätetään vain olennaisesti yhteen kuuluvat ominaisuustyypit. Funktionaalinen riippuvuus: Funktionaalinen riippuvuus voidaan määritellä seuraavasti: Jos A ja B ovat ominaisuustyyppejä tai ominaisuustyyppiyhdistelmiä ja jokaista A:n arvoa vastaa YKSI ja VAIN YKSI B:n arvo, sanotaan, että B on funktionaalisesti riippuva A:sta. Tätä merkitään usein A->B Jos A on usean ominaisuustyypin yhdistelmä ja B on funktionaalisesti riippuva koko A:sta eikä mistään sen osajoukosta, sanotaan, että B on täydellisesti funktionaalisesti riippuva A:sta. Ensimmäinen normaalimuoto: Normalisointitarkastus alkaa siten, että kaikki yksilötyypit johdetaan ensimmäiseen normaalimuotoon, mikäli ne eivät jo siinä ole. Siksi on tarkasteltava, että millaisia ominaisuuksia yksilö voi saada. 1. Normaalimuoto (1NM) määritellään: yksilötyypin katsotaan olevan 1. Normaalimuodossa, jos sen kaikki ominaisuutyypit ovat perusominaisuustyyppejä, so. eivät ole koottuja. Jokainen ominaisuustyyppi siis voi sisältää vain yhden arvon. Toinen normaalimuoto: Toisessa normaalimuodossa tarkastellaan yksilötyypin sisäisiä riippuvuussuhteita. 2. Normaalimuoto (2NM) määritellään: Yksilötyyppi on toisessa normaalimuodossa, jos 1. Se on 1. Normaalimuodossa JA 2. Kaikki sen ei-avain -ominaisuustyypit perusavaimesta. ovat täydellisesti funktionaalisesti riippuvia Kolmas normaalimuoto: Kolmas normaalimuoto merkitsee sitä, että yksilötyypissä saa olla vain perusavaimesta täydellisesti funktionaalisesti riippuvia ei-avain -ominaisuustyyppejä (siis mihinkään avainehdokkaaseen kuulumattomia ominaisuustyyppejä), joilla puolestaan ei saa olla muuta keskinäistä riippuvuutta. 3. Normaalimuoto määritellään: Yksilötyyppi on kolmannessa normaalimuodossa, jos 1. Se on toisessa normaalimuodossa JA 2. Ei-avain- ominaisuustyypit eivät ole funktionaalisesti riippuvia toisesta ei-avainominaisuustyypistä (tarkemmin ominaisuustyyppijoukosta, joka ei sisällä avainta). 3.NORMAALIMUOTOA kuvataan usein puhumalla transitiivisesta riippuvuudesta, joka määritellään seuraavasti: Tarkastellaan yksilötyyppiä R(A,B,C). Ominaisuustyyppi C on transitiivisesti riippuva ominaisuustyypistä A, jos pitää paikkansa, että A->B JA B->C, mutta ei B->A (SIIS B ei ole avainehdokas) 30 Muut normaalimuodot ja normalisoitu käsitemalli: Boyce-Codd (BCNM): yksilötyypillä on useita koottuja, limittäisiä avainehdokkaita. BCNM:ssä yksilötyypin täytyy olla 3NM:ssä valittiinpa perusavaimeksi mikä tahansa avainehdokas. 4NM: tilanteet, joissa esiintyy nk. moniarvoista riippuvuutta 5NM: sykliset riippuvuudet (vaatii hajottamaan yksilötyypin kerralla kolmeen tai useampaan pienempään yksilötyyppiin). Alla on esitetty esimerkkejä eri normaalimuodoista: Ensimmäinen normaalimuoto taulukossa ei saa olla tietotoistoja taulukossa ei saa olla tietokoosteita piirinro p1 p1 p1 p2 p2 pinimi länsi länsi länsi itä itä mnro m1 m2 m2 m3 m4 mnimi pirkko heikki heikki simo kaija mosoit 00660 hki 00630 hki 00630 hki 70400 kuo 55610 ima tuote1 t1 t2 t5 t12 t9 määrä1 120 99 234 123 2234 tuote2 t9 t4 määr2 75 111 t4 221 Tässä taulussa on redundanssia eli samoja tietoja on moneen kertaan. Mm mnimi heikki on kahteen kertaan ja pinimi länsi jopa kolmeen kertaan. Lisäksi taulussa on tietotoistoja, mm otsikot 'tuote' ja 'määrä' on samassa taulukossa useassa sarakkeessa. Taulukossa on myös tietokooste eli mosoite sisältää kaksi tietoa (postinumero ja postitoimipaikka). Tällainen taulukko voidaan muuttaa ensimmäiseen normaalimuotoon seuraavasti: Tietokooste puretaan jakamalla tiedot kahteen eri sarakkeeseen. Tietotoistot puretaan jakamalla em taulukko kahdeksi eri taulukoksi seuraavasti: myyjätaulukko piirinro piirinnimi p1 länsi p1 länsi p2 itä p2 itä myyjä/tuotetaulukko mnro mnimi m1 pirkko m1 pirkko m2 heikki m2 heikki m2 heikki m3 simo m4 kaija m4 kaija mnro m1 m2 m3 m4 mnimi pirkko heikki simo kaija tuotenro t1 t9 t2 t4 t5 t12 t9 t4 mpostinro 00660 00630 70400 55610 määrä 120 75 99 111 234 123 2234 221 mptmp hki hki kuopio imatra 31 Toinen normaalimuoto Taulukko on toisessa normaalimuodossa, jos taulukon kaikki tiedot (ominaisuudet) ovat täysin riippuvat taulun koko avaimesta. Olennaista on siis selvittää ensin, mikä on taulukon avain. Myyjätaulukossa avain on mnro, joka yksikäsitteisesti määrittelee jokaisen rivin. Kaikki muut tiedot riippuvat mnro:sta, joten siinä ei tehdä muutoksia. Myyjätuotetaulukon avaimena on yhdistelmäavain (mnro, tuotenro). Siinä taulukossa myyjän nimi ei riipu koko avaimesta, vaan ainoastaan mnro:sta, joten mnimi voidaan ottaa siitä taulukosta pois. Toisessa normaalimuodossa taulukot olisivat seuraavat: myyjä/tuotetaulukko mnro tuotenro m1 t1 m1 t9 m2 t2 m2 t4 m2 t5 m3 t12 m4 t9 m4 t4 määrä 120 75 99 111 234 123 2234 221 myyjätaulukko piirinro piirinnimi p1 länsi p1 länsi p2 itä p2 itä mnro m1 m2 m3 m4 mnimi pirkko heikki simo kaija mpostinro 00660 00630 70400 55610 mptmp hki hki kuopio imatra Kolmas normaalimuoto Säännön mukaan kolmannessa normaalimuodossa ei taulussa saa olla transitiivisia riippuvuuksia. Myyjätaulukossa yllä mro on myyjätaulukon avain ja siitä riippuvat taulukon kaikki tiedot. Kuitenkin mnro määrää yksikäsitteisesti postinron ja kun postinumero tiedetään, tiedetään myöskin postitoimipaikka eli siinä on transitiivinen riippuvuus. Se voidaan poistaa ottamalla myyjätaulukosta pois postitmp ja perustamalla uusi taulukko, jossa postitoimipaikat ovat. Samalla tavalla mro:sta seuraa piirinro, josta seuraa piirinnimi. Näin myyjätaulukosta tehdään kolme uutta taulua. postinumerotaulu postinumero postitoimipaikka 00660 Helsinki 00630 Helsinki 70400 Kuopio 55610 Imattra myyjätaulukko piirinro mnro p1 m1 p1 m2 p2 m3 p2 m4 mnimi pirkko heikki simo kaija mpostinro 00660 00630 70400 55610 piiritaulukko piirinro p1 p1 p2 p2 piirinnimi länsi länsi itä itä 32 Neljäs normaalimuoto Joillakin ominaisuuksilla saattaa olla monia arvoja samanaikaisesti. Tällaisia ominaisuuksia ovat esim kielitaito, tutkinto ja harrastukset. Seuraavassa esimerkki tällaisesta tilanteesta ja sen ratkaisusta normalisoimalla. henktaulu hetu 11 11 11 12 12 henk hetu 11 12 nimi jussi jussi jussi maija maija kielitaito engl saksa ruotsi saksa engl kielitaito hetu 11 11 11 12 12 nimi jussi maija kieli engl saksa ruotsi saksa engl SQL-kieli Yleistä SQL (structured Query Language) kehitettiin IBM:n San Josen tutkimuslaboratioissa, alunperin nimi oli SEQUEL. Ensimmäinen toteutus oli System R. Kokemukset olivat hyviä ja niinpä kehitystä on jatkettu ja nyttemin SQL on käytössä lukuisien toimittajien sadoissa eri järjestelmissä. Tunnetuimpia varmaan ovat IBM:n db2 ja Oracle. Kuitenkaan kaikki relaatiotietokannat (esim Ingress) eivät tukeudu SQL-kieleen. Sittemmin SQL-kieltä on kehitetty edelleen ja siitä on tehty useita standardeja. ODBC (=open database connection tai connectivity): tarkoituksena on, että sovellusohjelma, joka käyttää sql-kieltä voi käyttää mitä tahansa tietokantaa, johon on odbc-ajuri. Sovellusohjelman ja tietokantamoottorin (=tiedonhallintaohjelmiston) välissä on ajuri, joka muuttaa sovelluksesta tulevat sql-käskyt sellaisiksi, että ne käyvät ko tiedonhallintajärjestelmälle ja vastaavasti tiedonhallintajärjestelmästä tulevat viestit muutetaan standardi-sql-muotoisiksi, jotka sovellus kykenee ottamaan vastaan. Osapuilleen samalla idealla toimivat esimerkiksi kirjoitinajurit, jotka muuttavat tekstinkäsittelyohjelman tuottamat kirjoittimen ohjausmerkit sellaisiksi, joita ko koneeseen kytketty kirjoitin ymmärtää ja "tottelee". Nimi (SQL) on itse asiassa turhan vaatimaton. SQL se ei ole pelkästään kyselykieli, vaan sen on: kyselykieli, kannan määrittely- tai kuvauskieli (DDL), kannan käsittelykieli (DML) , jolla voi tehdä tietokantaan tietojen muutoksia, poistoja ja lisäyksiä. SQL:ää voi käyttää itsenäisesti eli erikseen (käsikäskyillä), myös MsAccess-ohjelmassa sql-kieltä voi käyttää upotettuna jollakin ohjelmointikielellä esim. C:llä staattisesti (eli sql-käskyt on kiinteä osa ohjelmaa) tai dynaamisesti (ohjelman suoritusvaiheessa annetaan sql-käskyjä). 33 Eri sql-murteet eroavat tässä suhteessa aika lailla. Kuitenkin samat asiat voidaan kaikissa tehdä. Näkymä (view) Määritellään 'illuusio' taulusta, jota ei ole (se voi olla osa sarakkeita jostain olemassa olevasta taulusta tai yhdistelmä useamman taulun tiedoista). Tätä illuusiota (eli taulua) ei siis ole sellaisenaan tietokannassa, vaan tiedonhallintajärjestelmä hakee aina tiedot "oikeista" tauluista tai vie "oikeisiin" tauluihin tiedot. Näkymän avulla voidaan rajoittaa käyttäjien pääsyä joihinkin tietoihin (voidaan taulukohtaisesti ja näkymäkohtaisesti antaa oikeuksia) tai se voi olla vain helpottamassa ohjelmointia. Näkymän määrittelyesimerkki CREATE VIEW tov2 AS SELECT sukunimi, etunimi,ika FROM toverit käyttöoikeuksien määrittely GRANT ALL PRIVILEGES ON tov2 TO K12345 GRANT SELECT ON tov2 TO K23456 SQL-kyselyt Yhdestä taulusta SELECT tieto1, tieto2, tieto3 tai * (kaikki) FROM taulun nimi WHERE joku ehto tai joitain ehtoja ORDER BY tieto1, tieto2 ASC tai DESC SELECT ihmiset.nimi, ihmiset.huone, ihmiset.osasto FROM ihmiset; SELECT ihmiset.nimi, ihmiset.huone, ihmiset.osasto FROM ihmiset ORDER BY ihmiset.nimi DESC; SELECT * FROM ihmiset WHERE (((ihmiset.osasto)="Y")) ORDER BY ihmiset.nimi DESC , ihmiset.huone DESC; funktioita SELECT count (*) FROM tilaus rivien lukumäärä Tässä on tilaustaulusta tulostettu asiakkaittain asiakasnumero, tilausten kplmäärä ja tilausten mkyhteensä: SELECT tilasnro, Count(*) AS lukum, Sum(tilaus.tilhintayht) AS mkyht 34 FROM tilaus GROUP BY tilasnro; SELECT Count(*), Avg(tilhinta), Min(tilhinta), Max(tilhinta), Sum(tilhinta) FROM tilaus SELECT * FROM tilaus WHERE tilasnro = [anna asiakkaan numero] SELECT * FROM tilaus WHERE tilasnro = Forms![lomake1]![kentta2] tietystä kentästä) (asiakkaan numero kysytään) (asiakkaan numero otetaan lomakkeelta Useasta taulusta SELECT ihmiset.nimi, ihmiset.osasto, huoneet.iskpl, huoneet.hunro FROM huoneet INNER JOIN ihmiset ON huoneet.hunro = ihmiset.huone; SELECT ihmiset.nimi, ihmiset.osasto, huoneet.iskpl, huoneet.hunro FROM huoneet, ihmiset WHERE huoneet.hunro = ihmiset.huone; SELECT ihmiset.nimi, ihmiset.osasto, huoneet.iskpl, huoneet.hunro FROM huoneet, ihmiset WHERE huoneet.hunro = ihmiset.huone and ihmiset.nimi like 'A*'; Sql ja alikyselyt SQL:n avulla voi myöskin "ketjuttaa" kyselyjä seuraavasti (alikyselyjen idea). Tehdään ensin yksi kysely ja sitten sen tulosta käytetään seuraavassa kyselyssä jne select nimi from henkilot where huone IN (select huone from henkilot where nimi = 'jussi rajamäki') sql ja määritysmuutokset alter table toverit add sp int; alter table toverit drop sp; SQL ja tietokannan muutokset insert into auto values ('ABT-271', 'Toyota', 1975) vrt 'tekstikenttä' ja 1975 insert into auto (rekno, merkki) values ('ABT-271','Toyota') vain osa kentistä 35 insert into auto(rekno, merkki) values (Forms![lomake2]![kentta3], Forms![paalom3]![alilomake4]![mkentta] tiedot haetaan lomakkeelta update toverit set etunimi = 'Maija' where sukunimi = 'Rajamäki'; delete from toverit where etunimi = 'Maija': sql-triggerit Triggerit (laukaisimet, liipaisimet) ovat tietokannassa olevia sääntöjä, joiden perusteella suoritetaan "automaattisesti" jotain operaatioita, jos ehto on voimassa. create trigger ennatys after update of tulos on tulokset when (tulokset.tulos > ennatykset.mtulos) set ennatykset.mtulos = tulokset.mtulos; Sulautettu SQL SQL-käskyt upotetaan ohjelmointikieleen tai sovellus/raporttikehittimeen. Vastaukset suoraan ohjelmointikielen muuttujiin. Dynaaminen SQL: SQL-käskyjä luodaan dynaamisesti ohjelmakoodissa ja lähetetään generoitu SQL-käsky tietokantajärjestelmälle käännettäväksi ja suoritettavaksi. Oliotietokannat Oliotietokannat mahdollistavat monimutkaisia sisäkkäisiä ja dynaamisesti muuttuvia rakenteita Tarjoavat kyselyjen tueksi mielivaltaisia ja monimutkaisia operaatioita, joita käyttäjät voivat itse määritellä (vrt. select SQL:ssä) Mahdollistavat erityyppisten, usein yhdessä käsiteltävien olioiden tallentamisen fyysisesti lähelle toisiaan. Milloin kannattaa käyttää oliotietokantaa? Jos relaatiotietokannassa taulujen määrä kasvaa räjähdysmäisesti. Jos ilmenee monimutkaisten liitosten tarvetta. Jos sovelluksessa käytetään oliotekniikkaa. Jos talletettava tieto on monimutkaista, kuvia, ääntä, videokuvaa, muuttuvan kokoisia rakenteita. Jos kyseessä hajautettu ympäristö. Jos käyttö edellyttää pitkiä tapahtumia. Oliokäsitteitä Jokaisella tietokantaan talletetulla oliolla on oma yksilöllinen tunniste (object identifier, OID). OID on muuttumaton ja ainutkertainen Olion ominaisuuksia Oliotunnisteen lisäksi oliot eroavat toisistaan ominaisuuksiensa perusteella. Ominaisuudet voivat olla rakenne- tai käyttäytymisperusteisia. Olion rakenne määrittyy tyyppimäärittelyn mukaan. 36 Olioluokka Määrittää joukon, joka muodostuu rakenteeltaa ja ominaisuuksiltaan samanlaisista olioista. Kapselointi (encapsulation) Periaate, jonka mukaan kootaan yhteen toisiinsa liittyvät asiat eli tietokannan tapauksessa tiedon rakenne ja sallitut metodit. Osa tiedoista voi olla sisäisiä (private) ja osa julkisia (public). Sisäisiä tietoja voidaan käsitellä vain metodien avulla. Kompleksit oliot Kompleksi olio voi olla rakenteeton tai rakenteellinen tai rakenteeton (unstructured). Kompleksi olio on esimerkiksi bittikarttana esitettävä kuva. Rakenteinen (structured) kompleksi olio muodostetaan yksinkertaisemmmista olioista. Laajennettavuus Oliomallia voidaan laajentaa uusilla tietotyypeillä ja operaatioilla jo olemassaolevien (built-in) tyyppien lisäksi. Periytyminen (inheritance) Luokat muodostavat hierarkian, jossa aliluokat perivät yliluokkiensa ominaisuudet. Aliluokille voidaan määritellä lisäominaisuuksia. Moniperinnässä (multiple inheritance) Aliluokalla on useampia yliluokkia, joilta se voi periä ominaisuuksia. Syrjäyttäminen (override), kuormittaminen (overloading) ja myöhäinen (dynaaminen) sidonta (late binding) Määritellään jokin operaatio luokkahierarkian ylimmällä tasolla. Aliluokassa määritellään sama operaatio uudelleen eli syrjäytetään yliluokan määrittely. Yksi operaatio voi siis osoittaa useampaan eri ohjelmaan (kuormittaminen). Vasta ajonaikana ratkeaa, minkä aliluokan määrityksen mukaan operaatio suoritetaan (myöhäinen sidonta). Olio-relaatiomalli Sybasen Adaptive server on ns. olio-relaatiotietokanta, joka tukee suoraan Java-kielen olioiden sijoittamista tietokantaan. Lisätään tyontekijat tauluun uusi työntekija, jonka osoitteena on Java-luokan Osoite esiintymä. INSERT INTO tyontekijat(ID, nimi, Osoite) VALUES (1235, 'Kalle Kehveli', new Osoite ('piilokuja 13', '11111 mörskäkylä', 'Suomi') Lisätään tyontekijat-tauluun uusi työntekijä, jonka osoitteena on Java-luokasta Osoite perityn SuomOsoite-luokan esiintymä. INSERT INTO tyontekijat (ID, nimi, osoite) VALUES (1235, 'Ville Kehveli', new SuomOsoite('Piilokuja 14', '11111 Mörskäkylä') Etsitään työntekijät, joiden katuosoite on Piilokuja 14. SELECT name FROM tyontekijat WHERE Osoite.katu = 'Piilokuja 14' 37 Open Database Connectivity (ODBC) ja OLE DB ODBC on rajapinta SQL-sovellusten ohjelmointiin Windows-ympäristöissä. OLE DB on rajapinta mihin tahansa tietoon. Sovellus käyttää ODBC:n standardoituja funktioita, jotka tulkitsevat SQLkomennot tietokannan ymmärtämään muotoon. Sovelluksen ei tarvitse tukea erikseen mitään tiettyä tietokantasovellusta. Java Database Connectivity (JDBC): Java-ohjelmien käyttöön tarkoitettu standardoitu tietokantaliittymärajapinta. JDBC on puhtaasti oliopohjainen. ActiveX Data Objects -mallin yleiskäyttöiset luokat: Connection - luo yhteyden tietokantaan Command - käytetään kyselyjen suorittamiseen Recordset - tallettaa kyselyjen tulokset Oliotietokannat ja OQL OQL on SQL- tyylinen kieli tukien olioiden helppoa hakua. - vuorovaikutteiset ennakoimattomat (ad hoc) kyselyt ja tulkin käyttö kyselyihin -upotettujen kyselyiden yksinkertainen ohjelmointi ja C++ - määrittelyt käyvät suoraan OQLkielelle. - optimoinnin käyttö kyselyihin: voidaan käyttää relaatiotietokannoissa käytettyä optimointitekniikkaa. - looginen/fyysinen riippumattomuus - OQL-kyselyä voidaan tehostaa fyysisen tason parannuksilla, esim. indeksit. - Korkeamman tason rakenteet: OQL kuten SQL tukee lajittelua, ryhmittelyä, koostamista. - SQL kaltaisuus: helpottaa oppimista. - uusien piirteiden tuki: oliotietokantojen palveluun ominaisuuksia, kuten näkymät, liipaisimet, eheysrajoitukset. - Myös SQL- kyselykieltä on kehitetty olioperiaatteita paremmin vastaavaiksi. - SQL3- versiosta on kehitetty uutta standardia 2000-luvun aikana. SQL3:n osajoukko tunnetaan myös nimellä SQL:99. 1 38 Oliosuuntautuneet tietokannat 2 Mahdollistavat monimutkaisia, sisäkkäisiä ja dynaamisesti muuttuvia rakenteita. Tarjoavat kyselyn tueksi vapaavalintaisia (monimutkaisiakin) operaatioita, joita käyttäjät voivat itse määritellä (vrt. select, project, join SQLssä). Oliokannat mahdollistavat erityyppisten, usein yhdessä käsiteltävien olioiden tallentamisen fyysisesti lähelle toisiaan. Fyysinen läheisyys ja välimuistin käyttö vähentää levyn I/O:ta ja nopeuttaa tiedon saantia. Kaikkiin kantoihin luodaan sovelluksen tarvitsemista luokista malli (schema), jonka perusteella kanta osaa tallettaa oliot. Malli esittelee myös luokkien väliset suhteet eli periytymiset, koosteet ja assosiaatiot. Milloin kannattaa käyttää oliotietokantaa? Jos relaatiokannassa taulujen määrä kasvaa räjähdysmäisesti, niin se viittaa siihen, että rakenne on liian monimutkainen tauluilla hallittavaksi.Jos ilmenee monimutkaisten liitosten tarvetta. Jos liitoksissa on tauluja 3 tai enemmän, niiden suorittaminen hidastuu. Jos sovelluksessa käytetään olioteknologiaa. Oliokannan käyttö muiden oliomenetelmien (kuvausmenetelmien & koodin) kanssa vähentää yhteensovittamistarvetta (impedance mismatch). Jos talletettava tieto on monimutkaista, kuvia, ääntä, videokuvaa, muuttuvan kokoisia rakenteita. Tieto on lähellä tarvitsijaansa. Oliokantoja mainostetaan hyvänä ratkaisuna hajautetuille ratkaisuille Tietokanta-arkkitehtuuri: Palvelin: - hoitaa I/O:n levylle, jossa kanta sijaitsee - hoitaa transaktioiden hallinnan - kommunikoi toisten palvelimien kanssa lukituksesta - tutkii lisensoinnin - hoitaa on-line varmistustoiminnot - huolehtii automaattisesta toipumisesta - korkeintaan yksi palvelin-prosessi yhdessä koneessa (voi olla useita kantoja) - tietohakemiston valvoja - hoitaa nimipalvelut Asiakas (client): - kirjasto, joka on linkattu sovellukseen hoitaa muistiosoitteet ObjectStoren varaamassa välimuistissa - varaa ja vapauttaa tilaa pysyville olioille - ylläpitää välimuistia äskettäin käytetyistä olioista - kommunikoi välimuistin valvojan kanssa lukituksista - lähettää vahvistettujen transaktioiden muuttamat tiedot palvelimelle - voi olla useita samassa koneessa Välimuistin valvoja: - hoitaa asynkroniset lukituspyynnät palvelimelle (asiakas huolehtii synkronisista) - vain yksi prosessi yhdessä koneessa - vähentää verkkoliikennettä asiakkaan ja palvelimen välillä Olion identiteetti, olion rakenne ja tyypin rakentajat Jokaisella tietokantaan talletetulla oliolla on järjestelmän generoima yksilöllinen tunniste (object identifier, OID). OID:n perusominaisuuksia ovat muuttumattomuus (immutable) ja ainutkertaisuus 39 (jokainen OID on käytössä vain kerran). Olisi myös suositeltavaa, että OID ei olisi fyysisen muistipaikan osoite, mutta tästä on jouduttu luopumaan joissakin toteutuksissa (tehokkuussyistä). 14 Mutkikkaan olion rakenne voidaan määritellä tyypin rakentajien (type constructors) avulla, joita ovat esim. joukko, monikko, lista, taulukko, säkki (bag). Olio esitetään kolmikon (i,c,v) avulla, missä i vastaa OIDtä, c on rakentaja ja v esittää olion arvon (tilan). Tähän perustuen voidaan päätellä esim. että jos c on jakamaton alkio, niin arvo v on atominen, jos c on joukko, niin v on joukko olioiden tunnisteita {i1, ... in}, OIDtä. Samanlaisuus määritellään joko tiukan identtisillä arvoilla (samat OIDt eri tasoilla) tai pelkästään samanlaisina arvoina. Kapselointi Kapseloinnin juuret löytyvät abstrakteista tietotyypeistä ja informaation kätkemisperiaatteesta. PKapselointia on aiemmin käytetty esim. oliokeskeisissä ohjelmointikielissä. Erotetaan olion ulkopuolelle (käyttäjille) näkyvät ja sallitut toiminnot (interface) ja muille näkymätön toteutus (implementation) eli sisäinen tietorakenne ja tämän rakenteen käsittely (methods). Tietokantasovelluksissa ei noudateta täydellistä kapselointia vaan esitellään sekä näkyviä (niihin voidaan kohdistaa kyselyjä) että piilotettuja attribuutteja. Ulottuvuus Oliot voivat olla pysyviä (persistent) tai tilapäisiä (transient). Pysyvät oliot talletetaan tietokantaan, josta ne voidaan hakea nimen avulla tai siihen ulotutaan jonkin toisen pysyvän olion kautta. Olion A sanotaan ulottuvan (reachable) olioon B, jos oliograafissa esitetään viite oliosta A olioon B. Oliotietokantojen eräs eroavuus esim. relaatiotietokantoihin tulee luokkamäärittelyjen ja pysyvien olioiden kokoelmien erottamisesta toisistaan. Oliotietokannoissa esitellään luokat ja erikseen esim. joukko- tai listarakenteen avulla määritellään pysyvät kokoelmat (extents), joihin oliot sitten talletetaan. Tyyppi- ja luokkahierarkiat Oliotietokannat perustuvat tyyppi- tai luokkahierarkioiden käyttöön ja perintään. Vaikka ne ovat käsitteellisesti erilaisia, ne johtavat samanlaiseen lopputulokseen. Uusia tyyppejä voidaan määritellä olemassaolevien perusteella, tämä johtaa tyyppihierarkioiden käyttöön. PTyyppi määritellään nimen, attribuuttien ja toimintojen avulla. Attribuutit ja operaatiot voidaan myös käsitellä yhtenä kokonaisuutena, funktiona. Alityyppi/supertyyppi määrittelyillä saadaan rakennettua tyyppihierarkioita ja voidaan toteuttaa periytyminen. Useimmissa oliotietokannoissa luokkahierarkia vastaa tyyppihierarkiaa, jolloin kaikki saman luokan oliot ovat samaa tyyppiä. Tilanvaraus luokan olioiden talletukselle tehdään extent määreen avulla.Pysyvät (persistent) luokat talletetaan tietokantaan (persistent collection) ja väliaikaisia (transient) luokkia käytetään esim. kyselyjen yhteydessä (transient collection). Mutkikkaat oliot Mutkikkaat oliot voivat olla rakenteellisia tai rakenteettomia. PRakenteelliset muodostetaan tyyppien rakentajien avulla. Rakenteettomia käytetään esim. kuvien ja suurten tekstimuotoisten olioiden esitykseen. Rakenteettomat mutkikkaat oliot Rakenteettomat mutkikkaat oliot tunnetaan myös termeillä BLOB (binary large objects) ja CLOB (character large object). Tietokannan hallintajärjestelmä ei tunne niiden rakennetta, ainoastaan sovellusohjelma voi tulkita olion tarkoituksen. Suuruudesta johtuen olio joudutaan hakemaan tietokannasta paloittain käsiteltäväksi. 40 Rakenteelliset mutkikkaat oliot Rakenteelliset mutkikkaat oliot ovat tietokannan hallinnassa ja siten myös monien sovellusten käytettävissä. Mutkikkaan olion komponenttien välillä tunnetaan omistajuus ja viiteyhteyksiä. Omistajuus vastaa is-part-of/is-component-of yhteyttä ja viiteyhteys is-associated-with yhteyttä. ODMG:n määrittelemä JDO (Java Data Objects) rajapinta tukee myös läpinäkyvää pysyvyyttä (transparent persistence): etsitään sovelluksessa käsiteltävään olioon liitoksissa olevat oliot ilman erityistä kyselyä välimuistiin hävittää rajan pysyvien ja tilapäisten olioiden välillä POODBMS käyttää ryvästystä tehostamaan rakenteellisen mutkikkaan olion hakuun levyltä Muita oliokäsitteitä Polymorfismi (monimuotoisuus) tarkoittaa operaatioiden kuormitusta. Tällöin saman operaation toiminta on räätälöity eri tyyppisille olioille. Monimuotoisuuteen liittyy myös aikainen tai myöhäinen sidonta, eli metodin toiminta sidotaan käännös- tai ajoaikana. Moniperintä johtaa verkko tai ristikko (lattice) rakenteisiin. Valikoivalla perinnällä alityyppi ottaa käyttöön vain osan supertyypin ominaisuuksista. Versioita ja konfiguraatioita tarvitaan esim. ohjelmistotuotantoa palvelevissa oliototeutuksissa. Samasta vaihetuotteesta/ moduulista on olemassa useita versioita ja ohjelmistokonfiguraatio on koottu sopivista vaihetuote-/moduuliversioista. Oliotietokantastandardit Standardien kehittely alkoi vuonna 1990 manifestien esittämisellä. Atkinson et al. esittivät "The Object-Oriented Database System Manifesto" ehdotuksen ja jatkoa seurasi ODMG-93 standardin muodossa, jossa määriteltiin esim. 1-N ja N-M yhteyksien toteutus inverse määrittelyllä ja oliokyselykieli OQL. ODMG standardin versio 2.0 julkaistiin vuonna1997 ja versio 3.0 vuonna 2000. The Object-Oriented Database System Manifesto (Atkinson, Banchilon, DeWitt, Dittrich, Maier, Zdonik) Säännöt: (1 - 13 oliosuuntautuneisuuden painotus) 1. Kompleksisten olioiden tuki (sets, bags, lists, arrays) 2. Olion ainutkertaisuuden tuki (identical/ equal) 3. Olioiden kapselointi (specification/implementation) 4. Tyyppi- tai luokkatuki (set of types/classes) 5. Luokkien tai tyyppien periytyvyys 6. Korvaus, kuormitus ja myöhäinen sitoutuvuus 7. Laskennallinen täydellisyys (computable function must be expressible) 8. Laajennettavuus (system-defined/ user defined types) 9. Tiedon pysyvyys (persistence) 10. Suurten tietokantojen hallinta (indexing, acccess path selection, query optimization) 11. Samanaikaisten käyttäjien salliminen (serializable access) 12. Elpyminen laitteisto- ja ohjelmistovirheistä 13. Ennakoimattomat kyselyt (ad hoc queries) The Object-Oriented Database System Manifesto Lisäpiirteet 1.Moniperiytyvyys 2. Tyyppien tarkistus ja tyyppien päättely 3. Hajautus 4. Suunnittelutransaktiot 5. Versiot 41 ODMG oliomallin komponentit Oliot ja literaalit Oliolla on yksilöiva tunnista (oid) ja tila (tai nykyinen arvo), se määritellään neljän ominaisuuden perusteella: • Yksilöivä tunniste • Nimi; olioon voidaan viitata pysyvän nimen avulla • Elinaika; pysyvä tai tilapäinen • Rakenne; atominen (voi olla myös rakenteinen) tai kokoelma Literaali esittää vakioarvoa; sillä ei ole tunnistetta ja se voi olla • Atominen (Long, Short, Unsigned Long, Unsigned Short, Float, Double, Boolean, Char, Enum, …) • Rakenteinen (Date, Interval, Time, Timestamp, Struct,…) • Kokoelma (SET, BAG, LIST, ARRAY, DICTIONARY,…) ODMG oliomalli käyttää interface määrittelyä class ja type määrittelyjen sijaan kokoelmaolion esittelyyn. Vastaa abstraktin luokan käsitettä. OQL OQL on SQL tyylinen kieli tukien olioiden helppoa hakua, vuorovaikutteiset, ennakoimattomat (ad hoc) kyselyt. • tulkin käyttö kyselyihin Upotettujen kyselyiden yksinkertainen ohjelmointi • C++ määrittelyt käyvät suoraan OQL kielelle, optimoinnin käyttö kyselyihin. • voidaan käyttää relaatiotietokannoissa käytettyä optimointitekniikkaa. - looginen/fyysinen riippumattomuus • OQL kyselyä voidaan tehostaa fyysisen tason parannuksilla, esim indeksit korkeamman tason rakenteet • OQL kuten SQL tukee lajittelua, ryhmittelyä, koostamista SQL kaltaisuus • helpottaa oppimista uusien piirteiden tuki • oliotietokantojen palveluun ominaisuuksia, kuten näkymät, liipasimet, eheysrajoitukset Myös SQL kyselykieltä on kehitetty olioperiaatteita paremmin vastaavaksi. PSQL-3 versiosta on kehitetty uutta standardia 2000 luvun aikana. SQL-3:n osajoukko tunnetaan myös nimellä SQL:99. SQL-3 (SQL:99) Jo SQL-2 tarjosi seuraavat laajennukset: liipasin/herätinkäsitteen (trigger) eheyden tarkistuksen tueksi, Grant ja Revoke komennot käyttöoikeuksien määrittelyyn, kehittyneemmät kyselymahdollisuudet, kuten rekursion käyttö, "for all" ja "for some" predikaatit, lisäyksiä liitoksen käyttöön Row-tyypin monimutkaisille rakenteille. Uudet itsemääritellyt tietotyypit , Boolean arvot ja Large Objects (LOB) suurten muistiolioiden talletukseen. SQL-3 määrittely jatkaa tästä ja uusina piirteinä ovat: SQL/PSM (Persistent Stored Modules) ominaisuudet • kielen laajennukset, esim. lausekielten yleiset ohjausrakenteet • ulkoisten proseduurien käyttö 42 • talletetut proseduurit Uudet tietotyypit (Row & ADT) Liipasimet/herättimet TIETOKANTASUUNNITTELUN PERUSTEET Alla olevat ohjeet soveltuvat tietokannan suunnittelulle millä tahansa välineellä. Hyvä suunnittelu vie aikaa, mutta vähintäänkin sama aika säästyy tietokannan toteutusvaiheessa. Suunnittelussa huomioitavaa: 1. Minkälainen tietokanta -- minkälaisia tietoja halutaan tallentaa 2. Tietokannan sisäinen rakenne -- mitä tauluja tarvitaan? -- mitkä tiedot tallennetaan mihinkin tauluun? -- taulujen avainkentät? -- tieto on tallennettuna vain yhdessä paikassa. TIETOKANNAN SUUNNITTELU Hyvin suunniteltu on puoliksi tehty. Hyva suunnittelu vie aikaa, mutta vahintaan sama aika yleensa saastyy tietokannan toteutusvaiheessa. Suunnittelussa huomioitavaa 1. Minkalainen tietokanta . Mita tietoja halutaan tallentaa? 2. Tietokannan sisainen rakenne . Mita tauluja tarvitaan? . Mitka tiedot tallennetaan mihinkin tauluihin? . Taulujen avainkentat? . Tieto on tallennettuna vain yhdessa paikassa. 3. Taulujen valiset yhteydet eli suhteet. Mahdollisia: yhden suhde yhteen, yhden suhde moneen ja monen suhde moneen. . Kaytannössa taulut rakennetaan yhden suhde yhteen ja yhden suhde moneen -suhteilla. 4. Kyselyt. Mita tietoja tarvitaan . Mista tauluista tiedot saadaan? Missa jarjestyksessa tiedot halutaan? 5. Lomakkeet . Mitka tiedot muodostavat yhdessa katsottaviaja paivitettavia kokonaisuuksia ? 6. Raportit. Mita tietoja tarvitaan ja mista tauluista? Miten tiedot muotoillaan? Mita summatietoja halutaan? Mita vakiotietoja raportille halutaan? 43 Tietokannan suunnittelussa ja toteutuksessa on seuraavat vaiheet: a) tietokannan tarkoituksen miettiminen (ER-mallinnus) Tietokannan loogisen rakenteen lisäksi pitää määritellä, mitä lopputuloksia esim raportteja, kyselyjä, tilastoja tietokannasta halutaan tulostaa. Nämä asiat määräävät sen, mitä tietoja tietokannassa pitää olla b) tietokannan relaatiot eli taulut Tyypillisesti tietokanta muodostuu "aihekohtaisista" tauluista. Taulujako ei ole itsestään selvä asia. Tavoitteena on, että kukin tieto on tietokannassa vain kertaalleen. Tyypillisiä tauluja ovat yritysmaailmassa: asiakaskunta, henkilöstö, tuotteet, tilaukset, toimitukset. c) taulujen sarakkeiden eli tietojen määrittely Kunkin taulun sisältö suunnitellaan yksityiskohtaisesti kenttä kentältä. Tietenkin tietokantaan kannattaa kerätä vain tarpeellisia tietoja eli sellaisia, joita käytetään raporteissa tai tilastoissa. Kustakin kentästä on määriteltävä ainakin nimi, kentän pituus ja tiedon tyyppi. d) liitäntöjen eli yhteyksien määrittely Relaatiokannassa taulut voidaan liittää toisiinsa. Liittäminen tarkoittaa sitä, että jossain taulussa esiintyvä tieto esim hetu-tunnus on myös toisessa taulussa, jolloin tämän yhteisen tiedon avulla taulujen vastinrivit voidaan liittää toisiinsa. e) em. vaiheiden jälkeen kannattanee vielä kerran katsoa suunnittelun tulosta ja vasta sitten käydä tekemään muunnosta relaatiomalliin f) ennen lopullista käyttöönottoa tietokantaa on vielä testattava Tietokannan määrittely Tietotyypit ja ominaisuudet Tietotyyyppi koko muoto desim syöttöraj otsikko oletus kelpois Kelp kuv Pakoll ? Tyhjät ? Indeks ? teksti x x x x x x x x x x memo x x x x x x X luku x x x x x x x x x aika raha x x x x x x x x X x X X X X x x x laskuri X X X X x Muoto: miltä tieto näyttää ruudulla; tämä liittyy lähinnä lukuihin ja päiväyksiin sekä kellonaikoihin luvut yleinen (general) esim 123,567 valuutta (currency) esim 123,55 vakio 23 345 567,567 123 prosentti 123,00% päiväys: esim ddmmyyyy 24121998; esim. yleinen (general) 12/31/2014 keskipitkä (medium) 31-jou-14 44 Syöttörajoite (input mask): tällä ohjataan syötettävän tiedon pituutta ja muotoa. Jos ajatellaan esim postinumero-kenttää, niin siinä syöttörajoite voisi olla 00000, mikä tarkoittaa, että pitää syöttää 5 kpl numeromerkkejä (pakko); jos ajatellaan henkilötunnusta, niin siinä syöttörajoite voisi olla 000000\-000A eli ensin 6 numeroa pakollisena, sitten tulee väliviiva, sitten kolme numeroa pakollisena ja sitten pakollisena kirjain tai numero. valikoimassa on mm. numeromerkki 0..9 pakollinen numero tai välilyönti, ei pakollinen # numero tai välilyönti, ei pakollinen, etumerkit + ja - sallittuja L kirjain, pakollinen ? kirjain, ei pakollinen A kirjain tai numero, pakollinen a kirjain tai numero, ei pakollinen & mikä tahansa merkki tai väli, pakollinen C mikä tahansa merkki tai väli, ei pakollinen \ seuraava merkki tulee näkyviin vakiona < aiheuttaa merkin muuttumisen pieneksi > aiheuttaa merkin muuttumisen suureksi Tässä on esimerkki tilausraportin lopputuloksesta ja määrittelyistä: Raportti perustuu kyselyyn, jossa on yhdistettynä tiedot kolmesta taulusta: tilaus, asiakas ja tuote. Kysely on SQL-muodossa seuraava: SELECT asiakas.asnimi, tuote.tuotenimi, tilaus.tilmaara, [tuotehinta]*[tilmaara] AS veloitus FROM (asiakas INNER JOIN tilaus ON asiakas.ansro = tilaus.tilasnro) INNER JOIN tuote ON tilaus.tiltuotenro = tuote.tuotenro; 45 Uutta 2015 luentomateriaalia: Tietokannan turvallisuus Tietoturvallisuus Tietokannan turvallisuus liittyy yleiseen tietoturvallisuuteen, johon puolestaan liittyy paljon peruskäsitteitä. Yleisesti hyväksytty ja paljon käytetty tietoturvallisuuden määritelmä on seuraavanlainen: ”Tietoturvallisuus (tietoturva) on tietojen, järjestelmien ja palveluiden asianmukaista suojaamista sekä normaali- että poikkeusoloissa lainsäädännön ja muiden toimenpiteiden avulla. Tietojen luottamuksellisuutta, eheyttä ja käytettävyyttä suojataan laitteisto- ja ohjelmistovikojen, luonnontapahtumien tai tahallisten, tuottamuksellisten ja tapaturmaisten inhimillisten tekojen aiheuttamilta uhkilta ja vahingoilta.” 1. Saatavuus: (käytettävyys): Järjestelmien tiedot ovat tarvittaessa niihin oikeutettujen käytettävissä. 2. Eheys: Tiedot ja järjestelmät ovat luotettavia, oikeellisia ja ajantasaisia, eivätkä ne ole laitteisto- ja ohjelmistovikojen, luonnontapahtumien tai oikeudettoman inhimillisen toiminnan seurauksena muuttuneet virheellisiksi. 3. Luottamuksellisuus: Tiedot ovat vain niiden käyttöön oikeutettujen saatavissa eikä niitä paljasteta tai muuten saateta sivullisten käyttöön. 4. Aitous: Ominaisuus, joka ilmentää tiedon eheyttä ja sitä, että tiedon alkuperäinen lähde on se, joka sen väitetään olevan. Alkuperäisyys-sanaa käytetään toisinaan samassa merkityksessä kuin aitous-termiä. (Sanastokeskus TSK 2004). 46 Sanastokeskus on koonnut tietoturvaan liittyvää sanastoa ja käsitteitä (kuva1) käsitekartan muodossa. Kuva 1. Tietoturvan käsitteitä (Sanastokeskus TSK 2004). Tietoturvan päämäärät ja periaatteet määritellään yrityksen tietoturvapolitiikassa. Tietokantoihin ja niiden suunnitteluun rakentamiseen ja käyttöön liittyy monia tiedon suojaukseen liittyviä aihealueita. Valtionhallinnon tietoturvallisuuden johtoryhmän VAHTI: n sivuilla kerrotaan heidän sivustojen olevansa yksi maailman kattavimmista yleisistä tietoturvaohjeistoista. Sivuston (Valtiovarainministeriö 2009) mukaan ohjeisto kattaa tietoturvallisuuden kaikki osa-alueet: • • • • • • • • Fyysinen turvallisuus Hallinnollinen tietoturvallisuus Henkilöstöturvallisuus Käyttöturvallisuus Laitteistoturvallisuus Ohjelmistoturvallisuus Tietoaineistoturvallisuus Tietoliikenneturvallisuus Tietokannat tietoineen ovat tietoaineistoa joka on kaiken tietoturvallisuuden keskellä (kuva 2). 47 Kuva 2. Tietoaineistojen turvallisuus on kaikkien tietoturvan kerrosten ytimenä. (Suomen Automaatioseura 2010). Tiedon turvaamiseen liittyy monia eri tasoja joiden pitää tietokannan turvallisuuden lisäksi olla kunnossa. Tietokantoja lähinnä ovat tietokantoja käyttävät ohjelmistot. Sovellusten turvallisuus Tietokannan varsinaiseen käyttöön tarvitaan siis yleensä erillinen ohjelmisto (kuva 3), ennen kuin käyttäjät pääsevät tietokantaan käsiksi (Viope 2014). Ohjelmistoa kutsutaan tietokannan hallintajärjestelmäksi (TKHJ). Kuva 3. Tietokannan käyttö (Laine 2010) (alla). 48 Tietokantaa käytetään tietokannan hallintajärjestelmän avulla. Käyttäjät voivat suorittaa operaatioita, kuten kyselyjä, suoraan tietokantaan tai sitä käyttävien sovellusohjelmien välityksellä. (Laine 2010) Tietokantojen huolellisen suunnittelun lisäksi myös tietokantoja käyttävien sovellusten suunnittelun eri vaiheissa on kartoitettava mahdolliset tietoturvariskit ja keinot joilla riskejä ehkäistään. Hyvä ohje on että huomioidaan kehitettävän sovelluksen kriittisyys liiketoiminnalle.(Valtiovarainministeriö 2013.) Kansainvälinen OWASP (Open Web Application Security Project) -yhteisö julkaisee listaa kymmenestä yleisimmästä sovellushaavoittuvuustyypistä Yleisin ohjelmistojen uhka on injektio, jossa käytetään sovellusten tietoturva-aukkoja hyväksi järjestelmiin tunkeutumisessa. Saatavuus Hyvin tavallista on että esimerkiksi verkkopankit ilmoittavat silloin tällöin että toiminnoissa on huolto- tai käyttökatkos jolloin pankkipalvelut ovat pois käytöstä tai korkeintaan käytettävissä varayhteyden kautta. Pankkitietojen saatavuus on tällöin kärsinyt. Yleisesti huolto ja käyttökatkokset, jos mahdollista, olisi hyvä ajoittaa sellaiseen ajankohtaan kun liikenne on hiljaisinta. Tietokantojen suorituskyky takaa omalta osaltaan sen että tietokantojen tiedot ovat nopeasti ja tehokkaasti niiden käyttäjien saatavilla, joilla on oikeus tietoja käyttää. Suorituskykyyn vaikuttaa tietokannan suunnittelun lisäksi tietokantaa käyttävän sovelluksen optimointi niin että se käyttää tietokantaa tehokkaasti. Käytettävällä levyjärjestelmällä voidaan myös vaikuttaa nopeuteen ja vikasietoisuuteen. Tietokantojen yhteydessä on usein käytetty RAID-levyjärjestelmää (Redundant Array of Inexpensive Disks). Lisäksi suorituskykyyn vaikuttaa tietokantapalvelimen prosessoriteho sekä muistin määrä ja käytettävä yhteys. Saatavuuden kannalta on tärkeää varmistaa tiedot varmuuskopioinnilla.(Nousiainen 2002; Kurtti 2010) Eheys Tietokantojen suunnittelussa pitää ottaa huomioon tietojen eheys. Tietokantojen eheyssäännöistä on kurssimonisteen kohdassa ”tietokantojen suunnittelu” aiheesta lisää. Tietojen eheys saattaa vaarantua jos tietueita poistetaan tai lisätään ilman että tiedetään mitä ollaan tekemässä. Muutoksia 49 voidaan haluta tehdä myös vahingoittamistarkoituksella. Käyttöoikeuksilla voidaan osittain estää normikäyttäjien tekemät virheet tietokantojen rakenteiden muuttamisessa. Laitteisiin tai ohjelmiin voi tulla vikoja ja esimerkiksi sähkökatkokset voivat aiheuttaa sen että tiedot eivät ole enää eheitä tai ristiriidattomia. Varmuuskopioinnilla, lokitiedostoilla sekä mahdollisuudella tehtyjen muutosten peruuttamiseen voidaan tarvittaessa palauttaa tietokanta takaisin ehjään tilaan. Yleisesti käytetty eheysmekanismi on kaksivaiheinen päivitys: aikomus ja päätös ('intent & commitment'). Ensimmäisen vaiheen eli aikomuksen jälkeen tarvitaan vielä päätös ennen kuin muutokset vahvistuvat. (Helenius 2010) Luottamuksellisuus Tiedot ovat vain niiden käyttöön oikeutettujen saatavissa eikä niitä paljasteta tai muuten saateta sivullisten käyttöön. Autentikointi (todennus) varmistaa, että vain sallitut käyttäjät pääsevät järjestelmään. Perinteistä pelkän käyttäjätunnuksen ja siihen liittyvän salasana avulla tunnistautumista pidetään heikkona tunnistautumisena ja esimerkiksi pankeissa käytetään edellisten lisäksi kertakäyttöistä salasanaa, myös sirukortteja ja biometristä tunnistusta voidaan käyttää.(Hämäläinen P 2005) Käyttöoikeudet ovat keskeinen osa tietokantojen turvallisuutta. Käyttöoikeuksia voidaan myöntää suoraan joillekin henkilöille tai oikeudet voivat liittyä rooliin (kuva 4). Rooliin sisältyy ne käyttöoikeudet joita käyttäjät tehtävässä tarvitsevat. Roolien hallinnassa käytetään termiä RBAC (Role-based Access Control). Etenkin suuria määriä käyttöoikeuksia myönnettäessä on helpompaa ja nopeampaa myöntää käyttöoikeuksia tietyille käyttäjäryhmille kuin yksittäisille käyttäjille. Käyttöoikeudet liittyvät tiedon luokitteluun johon voidaan käyttää erilaisia perusteita kuten tiedon tärkeys tai arkaluontoisuus. ( Ferraiolo &Kuhn1992) 50 Kuva 4. Käyttöoikeuksien jako roolien mukaan. (Oracle 2005). Tiedot voidaan myös halutessa salata mutta salauskaan ei ratkaise kaikkia tietoturvaongelmia vaan voi puolestaan synnyttää uusia ongelmia kuten suorituskyvyn aleneminen koska salaus vaatii yleensä paljon resursseja (Oracle 2012) Tietokantojen uhat Tietokantojen uhat voivat liittyä laitteisiin kuten kiintolevyjen kestävyyteen tai sähkökatkoksiin. Suurimmat uhkat liittyvät kuitenkin käyttöoikeuksiin (taulukko 1). Taulukko 1 Tietokantojen Top 10 uhat, 2010 ja 2013 (Imperva 2014) 51 Liiallisten (liian vahvojen) käyttöoikeuksien väärinkäyttö on yleisin tietokantojen uhka. Käyttäjille voidaan siis myöntää sellaiset käyttöoikeudet jotka oikeuttavat muuhunkin kuin mihin kenties tehtävät vaatisivat tai sallisivat. Näin voi käydä jos esimerkiksi tietokannan käyttöoikeuksien määrittämisessä halutaan päästä helpolla ja annetaan yleisiä oikeuksia kaikille. (Imperva 2014) Vaikka käyttöoikeudet olisivat oikein määriteltyjä, voidaan oikeuksia käyttää tarkoituksella tai vahingossa väärin. Tietoja voidaan esimerkiksi tallettaa omalle koneelle helpottamaan tiedon jatkokäyttöä, tai tietoa voidaan jopa myydä. (Ibid) SQL-injektiossa hyökkääjä antaa tietokantapalvelimelle muutettuja SQL-komentoja. Hyökkäys tapahtuu useimmiten puuttuvan tai väärin toteutetun syöttötiedon tarkistuksen kautta, ja joissain tapauksissa tietokantaan päästään käsiksi tietokantarajapinnassa tapahtuvan tiedon vääränlaisesta käsittelyn vuoksi. (Ibid) Riskikartoitus on osa tietokantojen tietoturvallisuutta, organisaatioiden on mietittävä riskien todennäköisyyttä sekä vakavuutta eri tietojen osalta. Taulukossa 2 on tietokantojen uhkiin liittyviä ohjeita ja parhaita käytäntöjä. Taulukkoa voidaan käyttää apuna tietoturvaratkaisujen suunnittelussa, todennäköisesti jokaisella organisaatiolla on lisäksi omia toimialaan tai johonkin muuhun seikkaan perustuvia uniikkeja ongelmia. 52 Taulukko 2. Tietokantojen uhat sekä malliratkaisut. (Imperva 2014). HUOM! Lisää tietokantojen tietoturvasta löytyy kirjasta: Handbook of Database, Security Applications and Trends (edited by Michael Gertz & Sushil Jajodia. 2008) http://www.cse.hcmut.edu.vn/~ttqnguyet/Downloads/SIS/3_Handbook%20of%20Database%20Sec urity%20-%20Applications%20&%20Trends%20(2008).pdf 53 Tietokannat ja tietoverkot Tietokoneet ovat nykyisin lähes poikkeuksetta yhteydessä jonkinlaiseen tietoverkkoon. Verkko voi olla organisaation lähiverkko jossa tietokoneet on yhdistetty toisiinsa ja ehkä lisäksi palvelimeen ja tulostimeen. Lähiverkon kautta voi yleensä olla yhteydessä myös Internetiin (kuva 1). Kuva 1. Lähiverkko (Tuikka 2014). Esimerkki sisäisen verkon kautta tapahtuvalle tietokantojen käytölle voisi olla että opiskelijat hakevat tietoa kirjastossa koulun koneiden ja tietoverkon avulla. Tietoa haetaan kirjaston omista elektronisista aineistoista tai erilaisista tietokannoista myös yliopiston verkon ulkopuolelta voidaan hakea ja etäkäyttää aineistoa. Puhuttaessa avoimen verkon tiedonhausta tarkoitetaan hakua Internetistä, esimerkiksi Googlen tai Google Scholarin avulla. (Tampereen yliopisto 2013) Tietoverkot mahdollistavat myös tietokantojen etäkäytön (kuva 2). Esimerkiksi Lappeenrannan teknillisellä yliopistolla on ssl-vpn palvelin, johon otetaan yhteys selaimella tai VPN asiakasohjelmalla. SSL-protokolla (Secure Sockets Layer) salaa tietokoneen ja internetsivun palvelimen välisen liikenteen sisällön (LUT 2007; Viestintävirasto 2014). 54 Kuva 2. VPN- etäkäyttöpalvelu (Oulun yliopisto 2013). Yliopiston verkon ja asiakkaan laitteen välille syntyy salattu VPN-tunneli, jota pitkin kaikki verkkoliikenne kulkee. Muualta katsottaessa näyttää siltä kuin asiakkaan laite olisi kytkettynä yliopiston verkkoon. (Oulun yliopisto 2013) Koska lähiverkojen kautta ollaan yhteydessä Internettiin, nousee yrityksen tai organisaation tietoihin kohdistuva tietoturvariski huomattavasti verrattuna vain pelkän oman sisäisen verkon riskiin. Tietoverkkoihin kytkettyjen laitteiden suojaaminen ulkopuolisista, kuin myös mahdollisesti omasta verkosta tulevilta hyökkäyksiltä, on tärkeä osa tietoverkkojen turvallisuutta.( WebOpas 2010). 55 Tietoverkkojen ja tietokantojen rajapinnat ODBC (Open Database Connectivity) on Microsoftin kehittämä ohjelmointirajapinta jonka avulla muodostetaan yhteys tietokantaan (kuva 3) (Virkki 2000). Kuva 3. Monen käyttäjän tietokantajärjestelmä (Words of Wisdom 2014). ODBC:tä käytettäessä ei tarvitse tietää onko se kytkeytynyt Access-tietokantaan vai esimerkiksi SQL Serveriin (kuva 4). Java kielelle on oma JDBC (Java Datbase Connectivity) joka on vastaavanlainen kuin ODBC, mutta toimi Java- ympäristössä. Muita tietokantayhteyden tarjoavia palveluja on mm. OLE DB (Object Linking and Embedding, Database), ADO (ActiveX Data Objects) (Virkki 2000). 56 Kuva 4. ODBC tarjoama rajapinta. (OpenLink Software 2014). PHP Ja MySQL MySQL on suosittu etenkin www-sivujen yhteydessä käytetty relaatiotietokantaohjelma. Tietokannassa voi olla esimerkiksi verkkokaupan tuotetiedot. Toisin sanoen asiakas etäkäyttää omalta koneeltaan käsin tietokantaa valitessaan tai katsellessaan tuotteita verkkokaupan kotisivuilla. MySQL:n kotisivuilla mainostetaan ohjelman olevan maailman suosituimman avoimen lähdekoodin tietokannan. Tosin MySQL:stä on olemassa myös kaupallinen versio (Laaksonen 2003). PHP on suosittu erityisesti dynaamisten web-sivujen toteutukseen tarkoitettu ohjelmointikieli. Dynaamisuus tarkoittaa sitä että nettisivut voivat muuttua sen mukaan miten esimerkiksi käyttäjä hakee sivulle tietoa (kuva 5). Moodle-oppimisalustassa on käytössä PHP ja usein juuri My SQL:n tietokannan kanssa (Laaksonen 2003). 57 Kuva 5. Tietokantapohjainen asiakas-palvelin (Tuikka 2007). Dynaaminen sivu luodaan vasta, kun selain sitä pyytää. Selaimen hakupyyntö käynnistää palvelinkoneella toimintoja, joiden tuloksena syntyy uusi verkkosivu. Tietokantapalvelin tietokantoineen voi sijaita myös omalla palvelinkoneella( Tuikka 2007 ). MySQL-tietokantaa käytetään usein PHP:llä. PDO-rajapinta (kuva 6) on PHP:ssä mukana uusimmissa versioissa. PDO:lla voi käyttää MySQL:n lisäksi muitakin tietokantoja. Kuva 6. PHP ja PDO- rajapinta (ZenTut 2014). 58 Hajautetut tietokannat & tietovarastointi HAJAUTETUT TIETOKANNAT (Distributed database) Kuten mainittua, hajautetuista tietokannoista on jo 15 luentokalvollista materiaalia. En ole aivan varma kannattaisiko olemassa olevaan materiaaliin lisätä tavaraa, vai pikemminkin tiivistää olemassa oleva materiaali murto-osaan nykyisestä laajuudesta. Päädyin kuitenkin lisäämään vielä yhden kappaleen olemassa oleviin luentokalvoihin, jolloin tiivistämistä voi harkinnan mukaan suorittaa kattavammasta materiaalista. Komplikaatiot Yleisesti ottaen hajautetuissa järjestelmissä tulee ottaa huomioon, että levyasemat ovat nopeudeltaan huomattavasti kehittyneempiä, kuin vastaavasti verkkoyhteydet, jolloin päätavoitteena hajautetuissa järjestelmissä nopeuden optimoimiseksi tulisi olla yleensä verkon kuormittamisen minimointi. (Date, 1994, s. 605). Seuraavaksi esiteltävät komplikaatiot eivät ole eristyksissä toisistaan, vaan vaikuttavat toinen toisiinsa. Tietokannan suunnittelulla on ratkaiseva rooli monien mahdollisten ongelmakohtien suunnittelussa ja ratkaisussa. (Valduriez & Özsu, 2011, s. 19). Kuva 1. Komplikaatioiden väliset suhteet. (Valduriez & Özsu, 2011, s. 19). 59 Hajautettujen tietokantojen suunnittelussa täytyy muistaa ottaa huomioon näiden lukuisten komplikaatioiden (kuva 1) mahdollisuus ja niiden väliset suhteet. Näitä ongelmia on muun muassa: Hajautettujen tietokantojen suunnittelu Perusvaihtoehdot hajautettujen tietokantojen tiedon sijoittamisen suunnittelussa on ositettu tai monistettu. Kaksi perustavaa laatua olevaa suunnittelun haastetta on sirpaloituminen ja hajautus. Sirpaloitumisella tarkoitetaan sitä, miten tietokanta ositetaan näiksi sirpaleiksi ja hajautuksella puolestaan tarkoitetaan sitä, miten nämä sirpaleet hajautetaan optimaalisesti. Tätä ongelmaa tutkitaan matemaattisella mallintamisella, jonka tarkoituksena on optimoida tietokannan varastointikustannukset, prosessointitransaktiot ja viestin välityksen sivustojen välillä. (Valduriez Özsu, 2011, s. 17). Hajautettu hakemistojen hallinta Hakemisto sisältää informaatiota, kuten kuvailua tai paikkatietoja, datasta tietokannassa. Haasteita on muun muassa siinä, miksi ja kuinka tätä tietoa tulisi sirpaloida. Hakemisto voi olla globaali tai lokaali, se voidaan myös keskittää yhdelle sivustolle tai hajauttaa useille. (Valduriez & Özsu, 2011, s. 17). Hajautettu kyselyn prosessointi Kyselyn prosessointi käsittelee algoritmit, jotka analysoivat kyselyt ja kääntävät ne datan muokkausoperaatioiksi. Ongelmana on optimoida kyselyt mahdollisimman kustannustehokkaiksi tätä varten luodun strategian mukaisesti. Huomioonotettavia faktoreita on tiedon hajautuksen määrä, yhteydenpitokustannus ja tarpeellisen lokaalisti saatavilla olevan informaation puute. (Valduriez & Özsu, 2011, s. 17). Hajautettu samanaikaisuuden hallinta Samanaikaisuuden hallinta sisältää hajautetun tietokannan sisäänpääsyn synkronoinnin siten, että tietokannan eheys säilytetään. Tämä on yksi eniten tutkituista haasteista hajautetuissa tietokannoissa. Hajautetuissa tietokannoissa ei jouduta huolehtimaan vain yksittäisen tietokannan eheydestä, vaan myös tietokannan kopioiden eheydestä. Ongelmanratkaisuun käytetään yleensä joko lukitusta, joka perustuu yhteiseen dataan pääsyn poissulkemiseen, tai sitten aikaleimausta, missä toimintojen suorittamiset määrätään perustuen aikaleimoihin. Näistä perusratkaisuista on olemassa lukuisia variaatioita, kuin myös hybridialgoritmejä, joilla pyritään yhdistämään nämä kaksi mekanismia. (Valduriez & Özsu, 2011, s. 18). 60 Hajautettu umpikujan hallinta Monien käyttäjien samanaikainen pyrkiminen käyttämään dataa voi johtaa umpikujaan, jos synkronointimekanismi perustuu lukituksiin. (tästä oli esimerkkikuva luentokalvoissa, nämä yhdistetään) (Valduriez & Özsu, 2011, s. 18). Hajautetun tietokannan luotettavuus Tietokannan luotettavuus ja saavutettavuus ovat hajautetun tietokannan potentiaalisia etuja, mutta ne vaativat paljon huomiota toteutuakseen. On tärkeää, että tietokannan johdonmukaisuuteen, virheiden havaitsemiseen ja niistä toipumiseen kiinnitetään huomiota. Virheiden johdosta tietokannasta tulee joko käyttökelvoton tai pääsy sinne estyy. Tietokannan pitäisi pystyä myös virhetilanteesta elpyessään päivittämään ja palauttamaan epäonnistuneet sivustot toimintakuntoisiksi. (Valduriez & Özsu, 2011, s. 18). Toistuvuus Jos tietokanta on osittain tai kokonaan monistettu, on tärkeää toteuttaa protokollia, jotka varmistavat monistettujen osien johdonmukaisuuden, eli että kopiot saavat samat arvot. Tämä voidaan toteuttaa niin, että toiminto ei valmistu, ennen kuin kaikki kopiot ovat päivitettyjä tai sitten toiminto päivittää vain yhden kopion, josta loput kopiot päivittyvät toiminnon valmistuttua. (Valduriez & Özsu, 2011, s. 19). 61 TIETOVARASTOINTI (Data warehousing) Tietovarastointi käsittää työkalut ja algoritmit, joiden avulla data tuodaan hajautetuista informaation varastoista yksittäiseen varastoon, johon voidaan suorittaa datan analysointia. Viimeaikainen kehitys tieteellisissä ja teknillisissä sovelluksissa on tuottanut valtavat määrät dataa. Tämä nopeasti kasvava datamassa, jota tallennetaan suuriin tietokantoihin, on ylittänyt ihmisen kyvyn käsittää sitä ilman asianmukaisia työkaluja. Tietovarastointi on tarpeellinen teknologia informaation keräämiseen hajautetuista tietokannoista jotta sille voidaan suorittaa analyysiä (Singhal, 2007, s. 12). Tietovarastoinnin kaupallinen hyödyllisyys on tuottaa liiketoiminnan johdolle työkaluja, joiden avulla voi systemaattisesti organisoida, ymmärtää ja hyödyntää informaatiota strategisiin päätöksiin. (Singhal, 2007, s. 2). Yleinen arkkitehtuuri Datan analysointiteknologia perustuu laajalti käytössä olevaan tietovarastointiarkkitehtuuriin. Siinä informaatio, joka tulee useista hajautetuista ja heterogeenisista varastointijärjestelmistä, integroidaan keskusvarastoon jota kutsutaan tietovarastoksi (data warehouse). Tätä integroitua informaatiota analysoidaan niin sanotuilla online analyyttisella prosessoinnilla (On-Line Analytical Processing, OLAP), kyselyillä ja datan louhintasovelluksilla, joiden tarkoituksena on: • Analysoida liiketoiminnan toimenpiteiden tehokkuutta • Löytää ja analysoida trendejä • Löytää anomalioita ja käyttäytymismalleja • Löytää riippuvuuksia • Ennustaa trendejä ja simuloida liiketoiminnan ratkaisuja Tietovarastointia ja OLAP-teknologiaa käytetään yleisesti muun muassa myyntiliiketoiminnassa, pankkialalla, pörssimarkkinoilla ja tieteessä. (Kozielski & Wrembel, 2009, s. 5). Teknisessä mielessä tietovarasto on suuri tietokanta. Tietovaraston suuri koko, OLAP-kyselyiden ja datanlouhinta-algoritmien monimutkaisuus sekä informaation heterogeeninen luonne aiheuttavat suuria haasteita. 62 Näihin haasteisiin kuuluu muun muassa: 1. Tietovaraston konseptuaalinen mallinnus ja loogiset tietomallit 2. Tietovaraston lataus (päivitys) 3. OLAP-kyselyiden ja datanlouhinta-algoritmien tehokkaan suorittamisen varmistaminen 4. Materialisoituneiden näkymien hoitaminen 5. Datan analysointitekniikat 6. Metadatan käsittely 7. Tietovaraston kehittymisen hallinta 8. Striimit, reaaliaikaiset ja aktiiviset tietovarastot 9. Monimutkaisen informaation varastonti (XML, objekti, multimedia) Tyypillisesti tietovarastoissa käytetään moniulotteista tietomallia. Siinä analysoitu informaatioon ja kerättyihin faktoihin viitataan monilla ulottuvuuksilla, jotka luovat kontekstin analyysille. Tällaisia moniulotteisia tiloja kutsutaan ”tietokuutioiksi”. Näitä kuutioita voidaan toteuttaa relaatio- tai moniulotteisilla servereillä. (Kozielski & Wrembel, 2009, s. 5). Tietovaraston ominaisuudet Tietovaraston avainominaisuuksiin kuuluu: 1. Subjektiorientoitunut: Tietovaraston tieto on organisoitu pääsubjektien, kuten asiakkaan, toimittajan tai myynnin mukaan ja se keskittyy mallintamaan tietoa päätöksentekoa varten. 2. Integraatio: Tietovarasto on rakennettu integroimalla monia heterogeenisiä lähteitä, kuten RDBMS, flat-tiedostoja tai OLTP-tallenteita. 3. Aikariippuvainen: Tieto on varastoitu tuottamaan tietoa historiallisesta perspektiivistä. (Singhal, 2007, s. 2). 63 Tietovarastoinnin uudet trendit Tietovarastoinnista on tullut erittäin suosittua monissa yrityksissä, mutta sitä on pystytty hyödyntämään vain melko yksinkertaisen tyyppisen informaation kanssa. Jotta voitaisiin laajentaa tietovarastoinnin etuja, on selvitettävä Kozielskin & Wrembelin (2009, s. 2) mainitsemat viisi yksilöllistä haastetta: 1. Fyysisen maailman tiedon tallentaminen 2. Strukturoidun, semi-strukturoidun ja strukturoimattoman datan integroiminen tietovarastossa 3. Menneen, nykyhetken ja tulevaisuuden integroiminen 4. Epätäydellisen tiedon varastointi 5. Yksityisyyden varmistaminen tietovarastoissa Nykyisten teknologioiden ongelmana on, ettei tämäntyyppisten tiedostojen/mallien integroiminen ja analysoiminen ole johdonmukaisesti mahdollista. Sen sijaan sovelluksiin pitää kehittää ad-hoc sovelluksia integroimiseen ja analysointiin. Tämä puolestaan on kallista ja virheherkkää. (Kozielski & Wrembel, 2009, s. 2). Yleinen perusta näiden haasteiden selättämiseen voisi olla uudenlainen datamalli, joka perustuu moniulotteiseen ja semistrukturoituun dataan, mutta joka tukisi paljon laajempaa datamuotojen skaalaa. Erityisesti tuen tulisi olla paikkatietoihin, sensoridataan, striimeihin, semistrukturoituun ja strukturoimattomaan dataan ja epätäydelliseen dataan (Kozielski & Wrembel, 2009, s. 2). 64 Lähteet Mustonen-Ollila, E. Lappeenrannan teknillinen yliopisto, tietotekniikan osasto Pesonen, T. Lappeenrannan teknillinen korkeakoulu Rajamäki, J. Helsingin Ammattikorkeakoulu, Tekniikka ja Liikenne Tervonen, I. Oulun teknillinen tiedekunta. Tikkala, A. Lappeenrannan teknillinen korkeakoulu. http://appro.mit.jyu.fi/2002/kevat/tietokannat/harkka/malli.html ATK-insituutti: Relaatiotietokannat, 1993 Polvinen, T. Tietokannat käytännön työssä, 1999 Jeffrey, D. Ullman, Jennifer Widom: A first course in database systems, 1997 Fred McFadden, Jeffrey Hoffer, Mary Prescott: Modern Database Management, 1999 C.J. Date: An Introduction to Database Systems, 1995 Thomas Connolly, Carolyn Begg, Anne Strachan: Database Systems, 1998 Brockschmidt, Kraig, 1995. When to Use Which OLE Technology. Microsoft Developer Relations. http://www.microsoft.com/oledev/olemkt/oleent/whenwhat.htm. Favorin, Tero, 1996. Internetin mullistajat. Tietokone, nro 9/1996. Informix, 1996. Informix NewEra and OLE Integration. http://www.informix.com/informix/corpinfo/zines/whitpprs/ole/ole.htm Microsoft corporation, 1997. Active Server Pages FAQ. http://www.eu.microsoft.com/iis/LearnAboutIIS/ActiveServer/faq.htm. Microsoft corporation, 1996a. Microsoft OLE DB. http://www.eu.microsoft.com/oledb/. Microsoft corporation, 1996b. White paper: Universal Data Access - OLE DB. http://www.eu.microsoft.com/oledb/prodinfo/wpapers/wpapers.htm. North, Ken, 1996. Database programming with OLE and ActiveX. DBMS, November 1996. Oracle, 1996. Introduction to Oracle Objects. http://www.oracle.com/support/bulletins/oo/html/1400.html Rauch, Stephen, 1996. Talk to Any Database the COM Way Using the OLE DB Interface. Microsoft Systems Journal July 1996. Sun Microsystems, 1996a. Java Beans: A Component Architecture for Java. http://splash.javasoft.com/beans/WhitePaper.html. Sun Microsystems, 1996b. JDBC Guide: Getting Started. http://java.sun.com/products/jdk/1.1/docs/guide/jdbc/getstart/intro.doc.html. Tanttu, J. (2014). Tietokannat ja tietoverkot. Harjoitustyö Tietokannat-kurssille. Peltonen, M. (2014). Hajautetut tietokannat ja tietovarastot. Harjoitustyö Tietokannat- kurssille. Ferraiolo, David F.. & Kuhn, D. Richard. 1992. Role-Based Access Controls. Reprinted from15th National Computer Security Conference (1992), Baltimore MD.[verkkojulkaisu]. [viitattu 14.5.2014]. Saatavissa: http://csrc.nist.gov/rbac/ferraiolo-kuhn-92.pdf Helenius, M. 2010. EheysTietokannassa. TWiki. [verkkojulkaisu]. [viitattu 14.5.2014]. Saatavissa: https://jop.cs.tut.fi/twiki/bin/view/Tietoturva/EheysTietokannassa%282-A%29 Hämäläinen, P. 2010.Vahva käyttäjätunnus. Tietokone- digilehti. [viitattu 14.5.2014]. Saatavissa: http://www.tietokone.fi/artikkelit/vahva_kayttajatunnistus Imperva. 2014. Top Ten Database Threats.The Most Significant Risks and How to Mitigate Them. [verkkojulkaisu]. [viitattu 14.5.2014]. Saatavissa: http://www.imperva.com/docs/WP_TopTen_Database_Threats.pdf Kurtti, N 2010. RAID-tekniikka. TWiki. [verkkojulkaisu]. [viitattu 14.5.2014]. Saatavissa: https://jop.cs.tut.fi/twiki/bin/view/Tietoturva/RAID-tekniikka(2-A) Laine H. 2010, Tietokantasovellus Tietokantaohjelmointi ja Java-tietokantaliittymä. Helsigin yliopisto, Tietojenkäsittelytieteen laitos. [verkkojulkaisu]. [viitattu 14.5.2014]. Saatavissa:https://www.cs.helsinki.fi/u/laine/tikas/material/ohjelmointi.html Nousiainen, A. 2002. Tietokannan suorituskyky kohdalleen. Tietokone- digilehti. [viitattu 14.5.2014]. Saatavissa: http://www.tietokone.fi/artikkelit/tietokannan_suorituskyky_kohdalleen 65 Oracle, 2012 Database Security Guide Developing Applications Using Data Encryptio 2005. [verkkojulkaisu]. [viitattu 14.5.2014]. Saatavissa: http://docs.oracle.com/cd/B19306_01/network.102/b14266/apdvncrp.htm#i1007112 Oracle, 2014 Database Security Guide. 2005. [verkkojulkaisu]. [viitattu 14.5.2014]. Saatavissa: http://docs.oracle.com/cd/B19306_01/server.102/b14220/security.htm Sanastokeskus, TSK . 2004. Tiivis Tietoturvasanasto. [verkkojulkaisu]. [viitattu 14.5.2014]. Saatavissa: http://www.tsk.fi/fi/info/TiivisTietoturvasanasto.pdf Suomen Automaatioseura ry. 2010 Turvallisuusjaosto. Tietoturvan hallinnan periaatteet. [verkkopainos]. [viitattu 14.5.2014] Saatavissa https://www.cert.fi/attachments/cip/5na1SblCp/SAS29_TeollisuusautomaationTietoturva.pdf Valtionvaraiministeriö. 2009.Hankkeen tietoturvallisuuden osa-alueet. [verkkojulkaisu]. [viitattu 14.5.2014]. Saatavissa: https://www.vahtiohje.fi/web/guest/hankkeen-tietoturvallisuuden-osa-alueet Valtionvaraiministeriö. 2013.VAHTI 1/2013 Sovelluskehityksen tietoturvaohje. [verkkojulkaisu]. [viitattu 14.5.2014]. Saatavissa: https://www.vahtiohje.fi/c/document_library/get_file?uuid=03c32520-f3f8-4621-b0d4ec4ca8edafb3&groupId=10128&groupId=10229 Viope 2014. Tietokannat kurssin SQL- verkkokurssi. Teoriaa. [viitattu 13.03 014}. Saatavissa: lut.viope.com, vaatii käyttäjätunnuksen. Date, C. J. (1994) An Introduction to Database Systems. New York. Addison-Wesley. Valduriez, P. & Özsu, M. T. (2011) Principles of Distributed Database Systems. 3. p. New York. Springer Science. Kozielski, S. & Wrembel, R. (2009) New Trends in Data Warehousing and Data Analysis. New York. Springer Science Singhal, A. (2007) Data Warehousing and Data Mining Techniques for Cyber Security. New York. Springer Science. Laaksonen, A. 2003. Ohjelmointiputka. Opasarkisto: Käytännön PHP-opas: Osa 1 – Johdanto. [verkkojulkaisu]. [viitattu 19.5.2014]. Saatavissa: http://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=phpj LUT. 2007.Lappeenrannan teknillinen yliopisto. SSL-VPN palvelimen käyttöpolitiikka. [verkkodokumentti]. [viitattu 19.5.2014]. Saatavissa: https://uni.lut.fi/documents/10304/442fa2667194-43b9-bdc4-0b9f0ea0d6fc OpenLink Software. 2014. Multi-Tier ODBC Driver Architecture [verkkojulkaisu]. [viitattu 19.5.2014]. Saatavissa: http://www.openlinksw.com/ Oulun yliopisto. 2013. VPN-etäkäyttöpalvelu.[verkkojulkaisu]. [viitattu 19.5.2014]. Saatavissa: http://www.oulu.fi/tietohallinto/verkko/vpn/vpn.jpg Tampereen yliopisto. 2013.Nelli-Portaali.[verkkojulkaisu]. [viitattu 19.5.2014]. Saatavissa: http://www.uta.fi/kirjasto/oppaat/tiedonhankinnanperusteet/yky/tiedonlahteet/nelli/index.html Tuikka, T. 2007. PHP:n perusteet. [verkkojulkaisu]. [viitattu 19.5.2014]. Saatavissa: http://batman.jamk.fi/~tuito/www_sk/phpperusteet.htm Tuikka, T. 2014. Tietoverkot.[verkkojulkaisu]. [viitattu 19.5.2014]. Saatavissa: http://batman.jamk.fi/~tuito/ta_ja_tjinfra/tietoverkot/tietoverkot.htm Viestintävirasto 2014 Viestinnän salaus. [verkkojulkaisu]. [viitattu 19.5.2014]. Saatavissa: https://www.viestintavirasto.fi/tietoturva/palveluidenturvallinenkaytto/viestinnansalaus.html 66 Virkki, O. 2000. Upotettu SQL. [verkkojulkaisu]. [viitattu 19.5.2014]. Saatavissa: http://myy.haagahelia.fi/~virou/TIHA/mats/TH_lu6x_ohj.pdf WebOpas. 2010. Tietoverkkojen suojaaminen. [verkkojulkaisu]. [viitattu 19.5.2014]. Saatavissa: http://webopas.blogspot.fi/2010/09/tietoverkkojen-suojaaminen.html Words of Wisdom. 2014. Mitä ovat tietokannat [verkkojulkaisu]. [viitattu 19.5.2014]. Saatavissa: http://www.wisdom.fi/site/dbms/tietokannat.html. ZenTut 2014. ZenTut Website PHP PDO. [verkkojulkaisu]. [viitattu 19.5.2014]. Saatavissa: http://www.zentut.com/php-pdo/