HELIA 1 (21) Luento 4.1 Oliot ja Relaatiot... 2 Relaatiomalli... 2 Oliomalli... 2 Termejä... 4 Yhteensovituksen 3 tapaa... 5 1) Oliot relaatioina / tauluina ja RDBMS... 6 Olioluokka... 7 Olion identiteetti... 8 Assosiaatiot... 9 Koostumus... 9 Hierarkia... 10 Suojaus / Kapselointi... 11 Polymorfismi... 14 2) Olioluokka relaationa ja ORDBMS... 17 3) Olioluokka abstraktina tietotyyppinä ja ORDBMS... 18 RDBMS-toimittajien asemat... 19 Oliotietokannat (OODBMS)... 20 ODMG... 20 ODMG-93 -standardi... 20
HELIA 2 (21) Oliot ja Relaatiot Relaatiomalli Syntyi 1970 Ä Codd:n artikkeli Ä lähtökohtana Tietovarastot Å 1. Kaupallinen tuote 1979 Å Saavutti nopeasti kaupallista menestystä Oliomalli syntyi 1960 luvulla Ä Simula ohjelmointikieli Ä lähtökohtana Ohjelmointi Å Kaupallinen menestys vauhdittumassa vasta 1990-luvun lopulla Ä Oliomallin mukaiset tietokannat uusi ohjelmistosektori Ei toistaiseksi kaupallista merkitystä Lastentauteja...
HELIA 3 (21) Ä olioparadigmassa on 2 herkkua: 1. komponenttiajattelu 2. luokkahierarkia ja sen tuoma koodin uudelleenkäyttö Ä Objekti-innoituksen vallassa ei ole syytä hylätä relaatioteknologian edistyneitä piirteitä: ã 4GL-ohjelmointia (arvoperusteinen saanti) vrs. 3GL-ohjelmointi (osoitinperustainen saanti, navigointi) ã potentiaalisten relaatioiden tuomaa avoimuutta vrs. staattinen tietoavaruus (so. potentiaaliset vrs. staattiset objektit, suhteet, poiminnat, ryhmittelyt, laskennat) ã DBMS:n tukemaa viite-eheyden hallintaa ã Aitoa suojausta vrs. ohjelmointiin perustuva suojaus ã Tapahtumanhallintaa Ä Tietokannoissa on tyypillisesti enemmän näkemyksiä kuin tietokantatauluja, ts. potentiaalinen tietoavaruus arvokas Å Tavoitteeksi 1. abstraktien tietotyyppien (=objektiluokkien) hyödyntäminen sekä 2. relaatiomallin avoimuuden ja joustavuuden säilyttäminen Ä sovellukset tulevat ja menevät - mutta data jää...
HELIA 4 (21) Termejä RDBMS Relational Database Management System Relaatiotietomallin mukainen tiedonhallintajärjestelmä ORDBMS Object Relational Database Management System Relaatiotietomalliin pohjautuva tiedonhallintajärjestelmä, jossa on oliomallin mukaisia laajennuksia OODBMS Object Oriented Database Management System Oliomallin mukainen tiedonhallintajärjestelmä
HELIA 5 (21) Yhteensovituksen 3 tapaa Ä Keskeinen kiista relaatiomallin ja oliomallin yhdistämisessä on keskeisten käsitteiden (ja tietorakenteiden) vastaavuus: 1. objektiluokka = domain? 2. objektiluokka = relaatio? Ä SQL3-standardissa molemmat mallit
HELIA 6 (21) 1) Oliot relaatioina / tauluina ja RDBMS Rumbaughin esittämä malli Ä Vanhin ja eniten käytetty yhteensovitustapa Ä Ei tue kunnolla monia oliopiirteitä Ä Lähtökohtana oliokaavio ja siinä kuvatut asiat Kuva: Rumbaugh: Object Oriented modeling and design (sisäkansi) Tarkastelu 1. Olioluokka 2. Attribuutit 3. Operaatiot 4. Olioinstanssi 5. Olion identiteetti 6. Suojaus 7. Assosiaatiot 8. Abstraktio 9. Monimuotoisuus
HELIA 7 (21) Olioluokka Joukko samankaltaisia olioita Luokan jäsenillä samankaltaiset ominaisuudet ja toiminnot Ä Luokka on olion malli, 'aihio', jonka avulla uusia olioita voi luoda Relaatiototeutus: jokainen luokka toteutetaan yhtenä tai useampana tauluna, joiden sarakkeet vastaavat luokan attribuutteja Ä Luokan toiminnallisuus voidaan määritellä a) tallennetuissa proseduureissa Ä Esim. Oraclessa luokan proseduurit voidaan koota package -moduuliin. Tällöin talletettu proseduuri vastaa luokan operaatiota ja moduuli luokan toiminnallista osaa. b) ulkopuolisessa ohjelmointikielessä Ä Javalla? ( joko tietokannassa tai sen ulkopuolella)
HELIA 8 (21) Olion identiteetti Ä Jokaisella oliolla oltava identifioiva tunniste. Ä riippumaton sen ominaisuuksista Ä keinotekoinen id viite Relaatiototeutus: Ä Relaatiovastine tietokantataulun pääavain Ä huomaa että yksilöitävyysvaatimus koskee koko tietokantaa ei vain ko. taulua Ä esim. kaikki pääavaimet otetaan samasta sekvenssistä Kuva / Rumbaugh s.376
HELIA 9 (21) Assosiaatiot Relaatiototeutus: 1:1 -assosiaatiot omana tauluna (tai vierasavaimina) 1:n -assosiaatiot omana tauluna (tai vierasavaimina) m:n -assosiaatiot omana taulunaan Koostumus Ä Kuten assosiaatiot
HELIA 10 (21) Hierarkia Jokainen aliluokka tarjoaa emoluokkansa tiedot ja toiminnot (mutta mahdollisesti uudelleenmääriteltyinä eli emoluokasta jossain määrin poikkeavalla tavalla) Aliluokka voi sisältää uusia tietoja ja toimintoja Kaikkia aliluokan olioita voidaan käsitellä emoluokan esittelemillä operaatioilla Relaatiototeutus: a) Luokka ja sen aliluokat toteutetaan kukin omana erillisinä tauluinaan b) Luokkaa ei toteuteta omana tauluna, ainoastaan aliluokat, joihin liitetään myös emoluokan attribuutit c) Aliluokkia ei toteuteta omina tauluinaan vaan luokka ja sen aliluokat toteutetaan yhtenä supertauluna Kuvat / Rumbaugh 382-385
HELIA 11 (21) Suojaus / Kapselointi Ä Suojauksen käsitteellä on erilainen merkitys oliopohjaisissa ja relaatiokantajärjestelmissä: Oliomalli Olion sisäinen toteutus piilotetaan Piilottaa voi ominaisuuksia ja operaatioita Olioon tarjotaan vain rajapinta (julkiset toiminnot) joita muut oliot / ohjelmoija voi käyttää Ä Sisäistä toteutusta voidaan tarvittaessa muuttaa, kunhan rajapinta ulospäin säilyy samana (so. miten kutsutaan, mitä palauttaa) leksikaaliseen kontekstiin perustuva suojaus datan ja koodin suojausta muilta käyttäjiltä Ä muita käyttäjiä ei eritellä (minä muut) Relaatiomalli käyttäjätunnuksiin, rooleihin ja käyttöoikeuksiin perustuva suojaus koodin suojaus ei kiinnostavaa
HELIA 12 (21) Relaatiototeutus Oliomalliselle suojaukselle: Ominaisuuksien suojaaminen Ä luokkaa vastaava relaatio piilotetaan kokonaan Ä Ts. taulun sijasta käytetään vain näkymää, jossa "julkiset" attribuutit esitetään Sisäinen rakenne Julkinen näkemys (tulosrelaatio) int.henkilö Sotu Etunimi Sukunimi ext.henkilö Syntymäaika Etunimi Sukunimi Onko_Luottoa int.tili tilino saldo Kaikkia Henkilö -luokan sisäisiä ominaisuuksia ei haluta esittää julkisesti, esim.sosiaaliturvatunnus ja luottosuosituksen peruste. Ä Olion tilaa saa muuttaa vain olion omilla operaatioilla, suoraa SQL-käsittelyä (Insert, Update, Delete) ei sallita. Kaikki muutokset kenttiin tehdään proseduurien / 3GL-rutiinien avulla. Ä Jos attribuuttien käyttö sallitaan olion ulkopuolelta, tulisi attribuuttia käyttää vain arvon lukemiseen (select), ei muuttamiseen
HELIA 13 (21) Operaatioiden suojaaminen Oraclessa aliohjelmia voi koota suuremmaksi kokonaisuudeksi package -rakenteen avulla, joka vastaa perinteistä moduulia tai C-kielen käännösyksikköä. Package -moduuliin voi proseduurien lisäksi määritellä muuttujia, kursoreita ja vakioita. Package -moduuliin kuuluvien proseduurien vaikutusaluetta voi rajoittaa siten, että ne ovat käytettävissä vain moduulin sisältä. Moduulin ulkopuolelle näkyvät proseduurit ovat globaaleja. Niiden käyttöä rajoitetaan käyttäjäkohtaisilla suojauksilla. Ä Jos yksittäinen proseduuri vastaa olion tiettyä operaatiota. Package vastaa luokan toiminnallista osaa. Sisäinen rakenne (Private -proseduurit) Julkinen näkemys (public -proseduurit) Henkilö-Package Public Synny() Public Kuole() Public Mene_Naimisiin(Kohde) Public OtaAvioero() Private Uusi() Private Poista() Private Aseta_Sukunimi() Private Aseta_Etunimi() Private Luo_Assosiaatio(kohde,tyyppi) Synny() Kuole() Mene_Naimisiin(Kohde) OtaAvioero() Henkilö -luokan sisäinen toiminnallisuus voidaan piilottaa Package -rakenteen avulla rajoittamalla proseduurien näkyvyysaluetta
HELIA 14 (21) Polymorfismi Järjestelmässä viitattu kohde selviää tarkasti vasta ajoaikana (ns. myöhäinen sidonta): Operaatiopolymorfismi Tietty ohjelmassa esiintyvä kutsu voi eri suorituskerroilla aktivoida eri operaatiota, jotka jakavat saman liittymän, kutsumuodon. Relaatiototeutus: Ä Oracle 7 ei tarjoa myöhäistä sidontaa, eikä niin ollen mekanismeja operaatiopolymorfismin toteuttamiseen. Ä Vastaavan kaltainen toiminnallisuus voidaan kuitenkin tarvittaessa toteuttaa "rakentamalla". Ä ohjelmointikielissä oliomallista riippumatonta monimuotoisuutta: parametrinen polymorfismi ja kuormitus samalle operaatiolle voidaan antaa useita määrityksiä siten että niihin liittyvä staattinen informaatio (parametrien määrä / tyyppi) riittää kertomaan kääntäjälle, mitä määritystä on sovellettava kunkin kutsun tapauksessa Ä Oraclen proseduureja voi kuormittaa
HELIA 15 (21) 2) Olioluokka relaationa ja ORDBMS Ä luokka määritellään kuten taulu Ä taulu luodaan luokkamäärittelyn pohjalta esim. CREATE TABLE henkilo ( hlo_id NUM hlo_nimi varchar(50) ) CREATE ROW TYPE rt_henkilo ( hlo_id REF(rt_henkilo) hlo_nimi varchar(50) ) CREATE TABLE henkilo OF TYPE rt_henkilo; Esim. Ullman s.447 (& 443?) Esim. hierarkiasta Elmasri 442 Ä Riviluokka ei tue olion kapselointia! Ä Riviluokka ei tue suoraan olion metodien määrittelyä
HELIA 16 (21) 3) Olioluokka abstraktina tietotyyppinä ja ORDBMS Relaatiomallille ei tule tehdä mitään! Se ei tarvitse täydennyksiä, korjauksia eikä lisäoletuksia. (Date, Darwen: Third Manifesto) Ä Malli, jossa oliot kuvataan relaatioina johtaa Daten mukaan loogisiin (ja käytännöllisiin) ongelmiin. Ä Parempi ratkaisu on toteuttaa objektit käyttäjän määritteleminä abstrakteina tietotyyppeinä ADT Abstract Data Type CREATE TYPE adt_osoite ( katu VARCHAR(50), postino INTEGER(5), kunta VARCHAR(20), EQUALS DEFAULT, LESS THAN osoite_lt Muiden funktioiden määrittely ); CREATE TABLE henkilo ( hlo_id NUM, hlo_nimi VARCHAR(59), osoite ADT_OSOITE ); esim. Ullman s.455
HELIA 17 (21) RDBMS-toimittajien asemat ORDBMS Oracle 8i IBM Universal Server Informix Dynamic Server RDBMS + middleware Microsoft SQL-Server 7 + Transaction server Sybase Adaptive Server + Jaguar Application Server
HELIA 18 (21) Oliotietokannat (OODBMS) Ä Objektitietokantatuotteet eivät ole vielä "valmiita". Ä Ongelmat, joita RDBMS-ohjelmistot ovat työstäneet ja osin ratkaisseet viime vuosikymmeninä, ovat retuperällä objektikannoissa, mm: eheys tietoturva concurrency transaktion hallinta toipuminen optimointi, viritys hallinnointi aputyökalut ODMG Object Database Management Group Perustettu 1991 Mukana oliotietokantatoimittajia ODMG-93 -standardi 1. ODL Object Definition Language 2. OQL Object Query Language Ä Syntaksin perustana SQL 3. 3-GL-liittymämäärittelyt
HELIA 19 (21) lisätietoa mm. http://www.odmg.org http://mordor.cs.hut.fi/~kta/odm/index.htm http://www.isc.rit.edu/~jam3198/odmg.htm http://www.dblab.ece.ntua.gr/~pvassil/sql_oql.html http://www.db.fmi.uni-passau.de/misc/sql3/