Relaatiomalli 5. Relaatiomalli Käsitteet Säännöt Käyttö 6. Relaatioalgebra (EI TENTTIIN!) Select, Project, Union, Difference, Join 7. (E)ER-mallin muuntaminen relaatioiksi Kaava Mikä on tietomalli? Malli, jolla tietokannan rakenne ja sisältö kuvataan Mallinnuksen abstraktiotasot: Käsitetaso, esim. (E)ER-malli Rakenteellinen käsitetaso, esim. relaatiomalli Sisäinen taso, järjestelmäkohtainen Vrt. Kolmikaava-arkkitehtuuri! 2001 Jukka Teuhola 2004 Antti Tuomisto Tietojenkäsittelytieteet Turun yliopisto 52 Relaatiomallin taustaa Codd, 1970 (IBM Research) Matemaattinen perusta Yksinkertainen käsitteistö Vähän rakennuspalikoita Helppo ja havainnollinen taulukkoesitys Perustana suosituimmissa tietokantajärjestelmissä (Oracle, Informix, DB2, Sybase, SQLServer, myös Accessissä) Relaatiomalli sopii ohjelmoijille ja SQL-käyttäjille Relaatiomallin käsitteitä 1/2 (kuva 5.1) Relaatio = Taulu Tupla (monikko) = Rivi Edustaa reaalimaailman kohdetta tai faktaa (relaatioon kootaan joukko samantyyppisiä kohteita / faktoja) Järjestetty lista arvoja (esityksen yksinkertaistamiseksi, loogisesti arvojen järjestyksellä ei väliä) Attribuutti = Sarake Samannimisiä relaation kohteiden ominaisuuksia Arvot atomisia Komponenttiattribuutit erillisinä Moniarvoinen attribuutti omana relaationa Arvojoukko = Attribuutin tietotyyppi (null?) 53 54 Relaatiomallin käsitteitä 2/2 (kuva 5.1) Relaation aste = Attribuuttien lukumäärä Relaatiokaava = Relaation nimi + attribuuttien joukko Tulkitaan predikaattina (väite, tosiasia) Relaation tila (instanssi*) = Tuplien joukko Tuplien järjestyksellä ei merkitystä (kuvat 5.1-5.3) 55 Merkinnät Relaatiokaava: RELNIMI(Attrnimi 1,..., Attrnimi n ) Tupla t = <arvo 1,...,arvo n > t [Attr i ] = tietyn attribuutin i arvo tuplassa t Q, R, S,... = Relaatio q, r, s,... = Relaation tila/instanssi t, u, v, = Tupla Pelkkä relaation nimi viittaa kyseisen relaation sen hetkiseen instanssiin RELNIMI.Attrnimi ilmoittaa yksiselitteisesti attribuutin johon viitataan EMPLOYEE.Age 56 1
Relaatiomallin säännöt 1/2 1. Arvojoukkorajoite Attribuutin arvo on atominen ja kuuluu sille määriteltyyn arvojoukkoon Tyhjä arvo (NULL) sisältyy aina arvojoukkoon 2. Avainrajoite Relaatiossa ei saa olla tuplia, joiden kaikkien attribuuttien arvot samat; relaatio on matemaattinen joukko Avaimiin liittyviä käsitteitä Superavain = Attribuuttien joukko, jonka arvot eivät ole samat kahdella eri tuplalla Avain = Minimaalinen superavain Ei voida poistaa yhtään attribuuttia siten, että jäljelle jäisi superavain Ehdokasavain = Attribuutti(ryhmä), joka on avain Pääavain = Valitaan yksi ehdokasavaimista Pääavain yleensä alleviivataan relaatio-kaavassa 57 58 Lisää avaimista Avainominaisuus on relaation semantiikkaan liittyvä asia, joka edellyttää sovelluksen tuntemusta Attribuutin tai attribuuttiryhmän satunnainen yksikäsitteisyys jossakin relaatioinstanssissa ei tee siitä avainta Esim. HLÖ=[Nimi, Ikä] taulun 4 instanssia: (Elina, 26), (Jussi, 23), (Mikko, 21), (Anne, 23) Nimi tuskin avain, mutta riippuu semantiikasta Relaatiomallin säännöt 2/2 3. Olioeheys Pääavaimen minkään komponentin arvo ei voi olla NULL 4. Viite-eheys Toiseen relaatioon viittaavan tuplan tulee viitata olemassa olevaan tuplaan Attribuutti(joukko) FK relaatiossa R1 on relaatioon R2 osoittava viiteavain, jos FK:lla sama arvojoukko kuin R2:n pääavaimella FK:n arvo relaation R 1 tuplassa t 1 esiintyy jonkin R 2 :n tuplan t 2 pääavaimena tai = NULL 59 60 Viiteavain (kuva 7.7) Kutsutaan myös vierasavaimeksi Mahdollistaa relaatioiden väliset kytkökset Relaatiomalli ei tunne varsinaisia osoittimia Kaikki liittymät esitetään data-arvojen kautta Esim. Kurssi(knimi, lukukausi, opettajanimi) Opettaja(opettajanimi, virka-asema) Viiteavain määrittelee M:1 suhteen viittaavan relaation ja kohderelaation välille Viittauksen kohteeseen voi olla useita viittauksia samasta tai eri relaatiosta Viiteavain voi viitata myös saman relaation pääavaimeen Kyseessä on eräänlainen rekursiivinen suhde 61 Lisää viiteavaimista Viiteavaimen merkintä Yhden attribuutin käsittävä viiteavain: Kurssi(kurssino, kurssinimi, ope Opettaja) Opettaja(hetu, nimi, laitos) Attribuuttiyhdelmä viiteavaimena: Osallistuu(opno, nimi, (kurssino, vuosi) Kurssi) Kurssi(kurssino, vuosi, kurssinimi, opettaja) 62 2
Semanttisia rajoitteita Miten valvoa ja rajoittaa tietueiden arvojen sisältöä? Tilarajoitukset Työntekijän palkan tulee olla pienempi kuin pomolla Yläraja työntekijän projektien työtunneille viikossa on 56 Muutosrajoitukset Työntekijän palkka voi vain nousta, ei laskea Toteutetaan Kannassa ns. constraint specification language Triggers and assertions Sovellusohjelmassa (ohjelmointikielellä) Relaatiotietokannan kaava (kuva 5.5,5.6) Nyt kohteena relaatioiden joukko Relaatiotietokannan kaava koostuu Relaatiokaavoista ja Eheyssäännöistä Relaatiotietokannan tilan/instanssin on koostuttava relaatiokaavojen mukaisista relaation tiloista/instansseista jotka toteuttavat em. eheyssäännöt 63 64 Relaatiotietokannan määrittely Lyhyesti tietokannan määrittelyn vaiheet Tietokannan nimeäminen Relaatioiden määrittely Relaation nimi Attribuutit Avaimet Eheyssäännöt Arvojoukkojen määrittely attribuuteille Päivitysoperaatiot ja ongelmat Lisäys voi rikkoa: Arvojoukkorajoitetta, avainrajoitetta, olioeheyttä, tai viite-eheyttä Poisto voi rikkoa: Vain viite-eheyttä Muutos voi rikkoa: Ei-avainattribuutti: Arvojoukkorajoitetta (Pää)avainattribuutti = poisto + lisäys Voi rikkoa kaikkia rajoitteita Viiteavainattribuutti: Viite-eheyttä 65 66 Päivitysongelmien korjaaminen Operaation estäminen Operaation muuttaminen Vyörytys: Päivitysoperaatio kohdistetaan myös viittaaviin (tai viittauksen kohteena oleviin) tupliin Harjoituksia: Mieti seuraavan sivun päivityksiä, niistä mahdollisesti aiheutuvia ongelmia ja tarvittavia korjaustoimenpiteitä Ks. myös esimerkki s.143 Esimerkkejä (kuvat 5.6, 5.7) Insert < Sales, Null, 987987987, 02-FEB-91 > into DEPARTMENT Insert < Test, 3, Houston, 5 > into PROJECT Insert < 123456789, Sue, Y, 32-MAY-79, SON > into DEPENDENT Insert < Modelling, 7, Memphis, 3 > into PROJECT Delete EMPLOYEE tuple with SSN='987654321' Delete WORKS_ON tuple with ESSN='999887777 and PNO=20 Delete PROJECT tuple with PNUMBER=3 Modify the DNO of the EMPLOYEE tuple with SSN='999887777' to 2 Modify PNUMBER of the PROJECT tuple with PNUMBER=3 to 4 Modify the SSN of the EMPLOYEE tuple with SSN='999887777' to '987654321' 67 68 3
6. Relaatioalgebra EI TENTTIIN! Operaatiot relaatioiden käsittelyyn Joukko-opin operaatiot Erityisoperaatiot relaatiotietokannoille Operaation tulos on relaatio Unaariset: Valinta, projektio, aggregaattifunktiot Binääriset: Unioni, leikkaus, erotus, karteesinen tulo, liitos 7.1-7.2 (E)ER-to-relational (1/14) Tiivistelmä kirjan sivuista 192-203 Ks. myös taulu 7.1 Vaihe 1: Tavalliset entiteettityypit Luo oma relaatio ja liitä siihen yksinkertaiset attribuutit Liitä yhdistetyt attribuutit komponentteinaan Valitse yksi avainattribuutti(joukko) pääavaimeksi Viiteavaimia ei vielä tässä vaiheessa 69 70... (E)ER-to-relational (2/14) Vaihe 2: Heikot entiteettityypit Käsittele viimeiseksi ne heikot entiteetit, joiden omistajana on toinen heikko entiteetti Luo oma relaatio ja liitä yksinkertaiset attribuutit Hajoita yhdistetyt attribuutit erillisiksi Liitä omistajaentiteetin pääavain viiteavaimeksi Relaation pääavain on omistajan pääavain + heikon entiteetin osittainen avain... (E)ER-to-relational (3/14) Vaihe 3: Binaariset 1:1 liittymät Valitse toinen entiteeteistä ja liitä toisen osapuolen pääavain sen relaatioon viiteavaimeksi Viiteavain on parempi liittää osapuoleen, jolla on täydellinen riippuvuussuhde (ei esiinny NULL-arvoja) Esim. [EMP] <manages> [DEPT]; viiteavain DEPT-relaatioon Liitä liittymän yksinkertaiset attribuutit samaan relaatioon kuin viiteavain Toinen vaihtoehto: Molemmat entiteetit ja liittymä yhdeksi relaatioksi Erityisen sopiva, jos molempien riippuvuussuhteet täydellisiä ja entiteeteillä ei muita liittymiä Kolmas vaihtoehto: Kuten M:N -liittymät 71 72... (E)ER-to-relational (4/14) Vaihe 4: Binaariset 1:N liittymät (ei heikko) Liitä N -puoleisen entiteetin relaation viiteavaimeksi 1 -puolen pääavain Liitä liittymän yksinkertaiset attribuutit myös N - puoleiseen relaatioon Toinen vaihtoehto: Kuten M:N liittymät... (E)ER-to-relational (5/14) Vaihe 5: Binaariset M:N liittymät Luo oma relaatio Liitä liittymään osallistuvien entiteettien pääavaimet relaation viiteavaimiksi Ovat yhdessä uuden relaation pääavain Liitä myös liittymän yksinkertaiset attribuutit relaatioon Aiemmat 1:1 ja 1:N liittymät voidaan myös kuvata tällä tavalla Jos liittymällä vähän instansseja, vältetään NULL-arvot Relaation pääavain on yhden osallistuvan entiteetin viiteavain (1:N):n tapauksessa N -puoleinen (1:1):n tapauksessa se jolla täydellinen riippuvuus (jos on) 73 74 4
... (E)ER-to-relational (6/14) Vaihe 6: Moniarvoiset attribuutit Luo oma relaatio, jossa Attribuutti joka vastaa moniarvoista attribuuttia Entiteetin pääavain Relaation pääavain on edellisten yhdistelmä Jos moniarvoinen attribuutti on yhdistetty, se liitetään komponentteinaan Huom! Tapauskohtaisesti avain sisältää kaikki komponentit tai osan komponenteista, kunhan avainominaisuus on olemassa... (E)ER-to-relational (7/14) (kuva 7.3) Vaihe 7: Liittymät joiden aste > 2 Luo oma relaatio Liitä osallistuvien entiteettien pääavaimet attribuuteiksi Liitä myös liittymän tavalliset attribuutit Pääavain on kaikkien viiteavaimien yhdistelmä Jos jonkun entiteetin osallistumisessa max=1 ei pääavaimeen; muiden avainten yhdistelmä riittää Huom! >2 -liittymät kannattaa muuttaa kaksiasteisiksi, jos vain mahdollista (esim. kuva 4.11) 75 76... EER-to-relational (8/14) (kuva 7.4) Em. on tärkeää omaksua! Jotta (E)ER-rakenteiden mallinnus olisi luontevaa, on hallittava rakenteiden toteuttaminen Vaihe 8: Luokkahierarkioiden esittäminen Merkitään PK(R) = relaation R pääavain (primary key) Muunna erikoistamishierarkia, jossa m aliluokkaa {S 1, S 2,..., S m } (yleistetty) yliluokka C{k, a 1, a 2,..., a n } PK(C) = k... relaatiokaavoiksi käyttäen yhtä seuraavista optioista A, B, C, tai D... (E)ER-to-relational (9/14) 8A Luo C:lle relaatio L, jolla attribuutit {k, a 1,..., a n }, missä PK(L)=k Luo jokaiselle aliluokalle S i oma relaatio L i, jolla attribuutit {k} {S i :n attribuutit}; missä PK(L i )=k Liitos jollekin L i :lle ja L:lle pääavaimen suhteen tuottaa kaikki periytyvät ja L i :lle spesifiset attribuutit Toimii sekä erillisillä, päällekkäisillä, täydellisillä että osittaisilla optioilla 77 78... EER-to-relational (10/14) 8B Luo relaatio L i jokaiselle aliluokalle S i, jolla attribuutit {S i :n attribuutit } {k, a 1, a 2,..., a n } ja PK(L i )=k Toimii hyvin vain täydellisillä ja erilisillä optioilla Ongelmatapaukset Osittainen hierarkia & entiteetti ei kuulu mihinkään aliluokkaan entiteetti menetetään Päällekkäinen hierarkia entiteetti kuuluu moneen aliluokkaan perityt attribuutit toistetaan alirelaatioissa L i redundanssia Yliluokan entiteetit eivät esiinny suoraan missään relaatiossa OUTER UNION kaikille tuottaa yliluokan entiteetit Tietyn instanssin C haku vaatii kaikkien L i :den haun... EER-to-relational (11/14) 8C Luo yksi relaatio L, jolla attribuutit {k, a 1, a 2,..., a n } {S i :n attribuutit}... {S m :n attribuutit} {t}; ja PK(L)=k t = tyyppiattribuutti, joka ilmoittaa aliluokan johon tupla kuuluu Aliluokkien oltava erilliset 79 80 5
... EER-to-relational (12/14) 8D Luo yksi relaatio L, jolla attribuutit {k, a 1, a 2,..., a n } {S i :n attribuutit}... {S m :n attribuutit} {t 1, t 2,..., t m }; ja PK(L)=k t i = Boolen-attribuutti, joka ilmoittaa kuuluuko tupla aliluokkaan S i Päällekkäisille aliluokille... EER-to-relational (13/14) (kuva 7.5) Ratkaisuista 8A-8D C- ja D-kohtia ei suositella, jos aliluokilla on paljon spesifisiä attribuutteja paljon NULL-arvoja Jaettujen aliluokkien kuvaaminen relaatioiksi Luokilla oltava sama avain, muuten mallinnetaan kategoriana Hierarkian ja hilan kuvauksessa voidaan käyttää eri osissa eri optioita, yleensä vaihtoehto 8A Katso kuva 7.5, jossa työntekijähila (kuva 4.7) on toteutettu usealla tavalla Esim. ENGINEER_MANAGER 81 82...EER-to-relational (14/14) (kuva 7.6) Vaihe 9: Kategorioiden kuvaaminen relaatioiksi Voi olla useita avaimia yliluokilla (OWNER-esim; kuva 4.8) Jos eri avaimia: määritellään uusi (sijais)avain joka esiintyy vierasavaimena yläluokkien relaatioissa Jos sama avain: ei tarvita ylimääräistä avainta 83 6