HELIA 1 (21) Luento 7 Relaatiomallin kertausta... 2 Peruskäsitteet... 2 Relaatio... 4 Määritelmä... 4 Relaatiokaava (Relation schema)... 4 Relaatioinstanssi (Relation instance)... 4 Attribuutti ja arvojoukko... 6 Monikko... 6 Eheyssäännöt / -rajoitukset (Integrity Constraints)... 7 Yksilön eheyssäännöt... 7 Viite-eheyssäännöt... 7 Arvojoukkosäännöt... 7 Sovelluskohtaiset eheyssäännöt... 7 Käsittely... 8 Relaatioalgebra... 8 SQL... 8 Apukäsitteitä... 9 Riippuvuudet... 9 Funktionaalinen riippuvuus... 9 Transitiivinen / suora riippuvuus... 11 Osittainen / täydellinen / riippuvuus... 12 Avaimet... 14 Normalisointi... 15 Tavoitteet... 15 1. normaalimuoto 1NF... 16 2. normaalimuoto 2NF... 17 3. normaalimuoto 3NF... 18 Normalisointiprosessi... 19 Normalisointiesimerkki... 21
HELIA 2 (21) Relaatiomallin kertausta Relaatiomalli on eräs tietomalli (muita mm. hierarkkinen malli, verkkomalli) Tietomalli Malli, jonka mukaan tietokannan tiedot organisoidaan. Malli koostuu joukosta peruskäsitteitä, -sääntöjä ja - operaatioita Perusajatuksiltaan yksinkertainen yksiselitteinen selkeä Pohjautuu perinteisen joukko-opin käsitteisiin Loogisen minimaalisuuden tavoittaminen Erinomainen väline tietokannan rakenteen ja käsittelyn kuvaamiseen Peruskäsitteet 1. Relaatio (Relation) 2. Attribuutti (Attribute) 3. Monikko (Tuple) Viralliset Käytännölliset Tiedostoista periytyvät Relaatio Taulu / Taulukko Attribuutti Sarake Kenttä Monikko Rivi Tietue
HELIA 3 (21) Relaatiotietomallissa kaikki tieto tallennetaan taulukkomuotoon relaatioihin (tauluihin) Relaation nimi Attribuutit OPETTAJA Lyhenne Nimi Huone Vastaanotto BenAn Benson 3012 BurOt Burman 3012 Monikot VirOu Virkki 3012 Ke 12-13 VirPe Virkki 3012 Arvo Ominaisuuksia: Relaatiossa ei saa olla kahta täysin samanlaista riviä! (relaatio on rivien joukko ja tietty alkio voi esiintyä joukossa vain kerran) Relaation jokaisella rivillä tulee olla yhtä monta attribuuttia Kukin attribuutti on homogeeninen, eli sisältää arvoja vain yhdestä arvoalueesta Kukin attribuutti on atominen, eli jakamaton Attribuuttien järjestyksellä ei ole merkitystä (tietyn relaation attribuuteilla on yksikäsitteiset nimet) Rivien järjestyksellä ei ole merkitystä (joukossa ei ole järjestystä)
HELIA 4 (21) Relaatio Määritelmä Olkoon D 1, D 2,, D n arvojoukkoja, joiden ei tarvitse olla erillisiä. Relaatio R on joukko monikkoja, joiden 1. arvo kuuluu joukkoon D 1, 2. arvo joukkoon D 2 jne. Relaatio on siis karteesisen tulon D 1 * D 2 * * D n osajoukko (Codd, 1970) Relaatiokaava (Relation schema) Määrittelee relaation rakenteen (pysyvät ominaisuudet) R(A 1, A 2,, A n ) R = relaation nimi A 1, A 2,, A n = attribuuttilista Jokaisella relaatiolla on yksikäsitteinen nimi Tietyssä relaatiossa jokaisella attribuutilla on yksikäsitteinen nimi Relaation aste = attribuuttien määrä Relaation koko = rivien määrä Relaatioinstanssi (Relation instance) Monikkojen joukko r = {r 1, r 2,, r n }
HELIA 5 (21) Johdannaistermejä: Relaatiotietokanta joukko relaatioita tiettyä kohdealuetta kuvaavien tietojen kokoelma joka on organisoitu relaatiotietomallin mukaisesti relaatiotietomalliin perustuvan tietokannan hallintajärjestelmän avulla toteutettu tietokanta Relaatiotietokantakaava joukko relaatiokaavoja joissain määritelmissä sisältää myös eheysmäärittelyt joissain määritelmissä sisältää myös käyttöoikeuksien määrittelyt Relaatiotietokantainstanssi joukko relaatioinstansseja
HELIA 6 (21) Attribuutti ja arvojoukko Jokaisen relaatiokaavan attribuuttiin A i liittyy arvojoukko / arvoalue dom(a i ), joka sisältää attribuutin A i mahdolliset (atomiset) arvot Tyhjä arvo (NULL) sisältyy jokaiseen arvojoukkoon Relaatiotietomallissa attribuuttien arvojoukot / arvoalueet voidaan määritellä vapaasti attribuuttien merkityksen mukaan esim. sukunimi arvoalue sisältää kaikki olemassaolevat sukunimet Relaatiotietokantatuotteissa arvoaluekäsitettä ei yleensä tunneta eikä tueta Sarakkeet esitellään perus tietotyyppien (Char, Int, ) ja niiden maksimipituuksien avulla Monikko koostuu arvoista ja niihin liittyvistä attribuuteista. monikko on siis tällaisten arvo-attribuutti parien joukko Arvo-attribuutti-pari sisältää merkityksen esim. hinta: 10,99 Tarkan merkityksen selvittäminen vaatii yleensä enemmän tietoa
HELIA 7 (21) Eheyssäännöt / -rajoitukset (Integrity Constraints) 1. Yksilön eheyssääntö (entity integrity constraints) 2. Viite-eheyssääntö (referential integrity constraints) 3. Arvojoukko-eheyssääntö (domain constraints) 4. Käyttäjän määrittelemät sovelluskohtaiset eheyssäännöt Yksilön eheyssäännöt Pääavain yksilöi kunkin relaation rivin Pääavain tai sen osa ei saa olla tyhjä Viite-eheyssäännöt Viiteavaimen arvon on löydyttävä viitatun taulun pääavaimen arvoista tai viiteavaimen arvon on oltava tyhjä Relaatiotietokannassa ei saa viitata objektiin, jota siellä ei ole. Arvojoukkosäännöt Tulkinta ja määrittely vaihtelee! Attribuutin arvot kuuluvat samaan arvojoukkoon. Kaikki arvojoukkoon liittyvät rajoitukset: tietotyyppi, pituus, sallitut arvot, oletusarvo, erilaisuus, välttämättömyys, ) Sovelluskohtaiset eheyssäännöt Sovelluksen toiminnan ja tietosisällön mielekkyyttä tukevat säännöt Esim. asiakas on kanta-asiakas, jos kuukausiostot ylittävät 1000 ja vip-asiakas jos kuukausiostot ylittävät 2000
HELIA 8 (21) Käsittely Relaatioalgebra SQL SQL:n DML käsitelty peruskurssilla
HELIA 9 (21) Apukäsitteitä Riippuvuudet Funktionaalinen riippuvuus Jos ominaisuuden A arvo määrää yksikäsitteisesti ominaisuuden B arvon niin B on funktionaalisesti riippuva A:sta A määrää B:n funktionaalisesti 1:1 n:1 A -> B Esim Henkilötunnus -> nimi Rekisterinumero -> auton merkki Yleistys: A, B -> C Esim. Tilausno, tuoteno -> tilausmäärä Projektino, henkilöno, kk -> työajankäyttö Funktionaalinen riippuvuuden X -> Y voimassaolo ei merkitse funktionaalisen riippuvuuden Y -> X voimassaoloa Ts. riippuvuus voi olla Toisesta suunnasta funktionaalinen Toisesta suunnasta moniarvoinen
HELIA 10 (21) Moniarvoinen riippuvuus Jos ominaisuuden A arvoon voi liittyä useita ominaisuuden B arvoja tavalla, joka ei riipu mistään 3. ominaisuudesta 1:n n:n A ->> B Esim. Äidin sotu ->> lapsen sotu projektino ->> henkilono osastono ->> projektino Riippuvuus voi olla Toisesta suunnasta funktionaalinen Toisesta suunnasta moniarvoinen
HELIA 11 (21) Transitiivinen / suora riippuvuus ~ Määrääkö attribuutti A attribuutin C suoraan vai välillisesti ominaisuuden B kautta Transitiivinen riippuvuus ~ attribuutti C on transitiivisesti riippuva attribuutista A, jos ja vain jos A -> B ja B -> C ja lisäksi B -/-> A ja C-/-> A Esim. Henkilötunnus --> hlo_nimi, os_tunnus, os_nimi Suora riippuvuus ~ Attribuutti A määrää attribuutin C suoraan, (ilman välittäviä attribuutteja) Esim. Henkilötunnus --> hlo_nimi, os_tunnus Os_tunnus --> os_nimi
HELIA 12 (21) Osittainen / täydellinen / riippuvuus Onko jokainen elementti mukana riippuvuudessa? Osittainen riippuvuus ~ Pääavaimen osa riittää identifioiman osan relaation avaimeen kuulumattomista attribuuteista Esim. Tilausno, tuoteno --> tuotenimi, tilaus_maara Täydellinen riippuvuus ~ Kaikki relaation avaimeen kuulumattomat attribuutit määräytyvät koko pääavaimen perusteella Esim. Tilausno, tuoteno --> tilaus_maara Tuoteno --> tuotenimi
HELIA 13 (21) Funktionaalisten riippuvuuksien ominaisuuksia / päättelysääntöjä 1. Refleksiivisyys Jos Y X niin X -> Y Esim: otsake, vuosi -> otsake Esim: otsake -> otsake Ns. triviaali riippuvuus (riippuvuuden olemassaolo on itsestään selvää) 2. Täydentäminen Jos X -> Y niin XZ -> YZ 3. Ositus Jos X -> YZ niin X-> Y 4. Unioni Jos X -> Y ja X -> Z niin X -> YZ 5. Transitiivisuus Jos X -> Y ja Y-> Z niin X -> Z Päättelysääntöjä voi käyttää relaatioiden yhdistämiseksi, (tavoitteena on sovellusalueen kuvaus pienimmällä mahdollisella relaatiomäärällä)
HELIA 14 (21) Avaimet Yliavain (Superkey) Attribuuttijoukko S on relaation R yliavain, mikäli X määrää funktionaalisesti relaation attribuuttien joukon Avain (Key) Attribuuttijoukko K on relaation R avain, mikäli K on relaation R yliavain, eikä attribuuttijoukosta K voida pudottaa pois yhtään attribuuttia siten, että K olisi edelleen relaation R yliavain Relaation avain on siis pienin relaation yliavaimista Jokaisella relaatiolla on ainakin yksi avain Relaatiolla voi olla myös useampia avaimia Pääavain (Primary key) Relaation avain tai mikäli niitä on useampia pääavaimeksi valittu avain Pääavaimen arvo ei voi olla tyhjä Avainehdokas (Key kandidate) Mikäli relaatiolla on useita avaimia, niitä nimitetään attribuuttijoukkoja avainehdokkaiksi Avainattribuutti (Prime attribute) Kaikki avainehdokkaisiin sisältyvät attribuutit
HELIA 15 (21) Normalisointi Tavoitteet Relaatiotietokannasta saadaan relaatiomallin mukainen Relaatioiden ja kohdealueen objektien välille pyritään saamaan läheinen rakenteellinen vastaavuus Minimoidaan tietokantaan sisältyvää käsitteellistä ja talletettavista tiedoista aiheutuvaa redundanssia Tietokannan päivitysten yhteydessä mahdollisten anomalioiden välttäminen (päivitysanomalia, poistoanomalia) Relaatioiden riveistä pyritään tekemään lisäysten, poistojen ja muutosten kannalta itsenäisiä kokonaisuuksia Tietokannan mahdollisimman suuri rakenteellinen joustavuus tulevien muutosten mahdollistamiseksi Normalisointi perustuu normaalimuotoihin Normaalimuodot ovat asteittain tiukkenevia ehtoja, jotka relaatioiden on täytettävä Relaatio on tietyssä normaalimuodossa, mikäli se täyttää tietyt rajoitusehdot kaikki relaatiot 1NF 2NF 3NF BCNF 4NF 5NF
HELIA 16 (21) 1. normaalimuoto 1NF Relaatio R on 1. normaalimuodossa jos ja vain jos sen jokainen arvoalue sisältää ainoastaan atomaarisia arvoja Relaatiomalli perustuu arvojoukon määritelmän kautta olettamukseen, jonka mukaan attribuuttien arvot ovat atomisia Ts. relaation on oltava kaksiulotteinen, siinä ei saa olla toistuvia ryhmiä, Moniarvoiset ominaisuudet on purettava omiksi relaatioikseen Relaatio, jonka attribuutit ovat atomisia on 1NF:ssa Esim. JULKAISU(julkaisuno, tekijät, otsake, ) ei 1NF! JULKAISU(julkaisuno, otsake, ) J_TEKIJA(julkaisuno, tekija)
HELIA 17 (21) 2. normaalimuoto 2NF Relaatio R on 2. normaalimuodossa jos se on 1NF:ssa ja jokainen ei-avaimena oleva ominaisuus on täydellisesti riippuvainen avaimesta Ts. avaimen osa ei saa riittää identifioimaan jotakin relaation attribuuteista Avaimen osasta riippuvat ominaisuudet esitetään omana relaationaan Esim: TYOPANOS(projno, hlono, hnimi, vuosi, kk, tunnit) ei 2NF TYOPANOS(projno, hlono, vuosi, kk, ) HLO(hlono, hnimi, )
HELIA 18 (21) 3. normaalimuoto 3NF Relaatio R on 3. normaalimuodossa jos se on 2NF:ssa ja mikään sen ei-avaimena olevista ominaisuuksista ei ole avaimesta transitiivisesti riippuvainen Relaatio R on 3. normaalimuodossa jos jokaisessa funktionaalisessa riippuvuudessa X -> A joko a) attribuuttijoukko X on relaation R yliavain b) A on avainattribuutti Ts. ei-avaimena oleva ominaisuus ei saa riippuu avaimen lisäksi jostakin muusta ei-avaimena olevasta ominaisuudesta Siirrä attribuutit, jotka riippuvat avaimen lisäksi jostakin ei-avaimena olevasta ominaisuudesta omaksi relaatiokseen Esim: HLON_OSOITE(hlono, katu, talo, postino, kunta) Ei 3 NF.. Normalisoinnin tavoitetaso! Ei toistuvia ryhmiä Yksikäsitteinen avain Ei epätäydellistä funktionaalista riippuvuutta Ominaisuudet keskenään riippumattomia Coddin alkuperäisessä määrittelyssä mukana vain 1NF, 2NF, 3NF
HELIA 19 (21) Normalisointiprosessi Normalisoimaton muoto Poista toistuvat ryhmät, se. Siirrä moniarvoiset attribuutit omaksi relaatiokseen 1NF (ei toistuvia ryhmiä) Poista epätäydellinen funktionaalinen riippuvuus se. Siirrä attribuutit jotka riippuvat pääavaimen osasta omaksi relaatiokseen, Jäljelle jäävät attribuutit riippuvat koko pääavaimesta täydellisesti 2NF (täydellinen riippuvuus koko avaimesta) Poista transitiivinen riippuvuus se. Siirrä attribuutit, jotka riippuvat avaimen lisäksi jostakin ei-avaimena olevasta ominaisuudesta omaksi relaatiokseen 3NF (ominaisuudet keskenään riippumattomia)
HELIA 20 (21) "The rules leading to and including the 3. normal form can be summed up in a single statement: Each attribute must be a fact about the key, the whole key, and nothing but the key." [Wiorkowski, Kull. DB2 Design and Development Guide]
HELIA 21 (21) Normalisointiesimerkki Customer Rental Customer _No Cname CR76 John Kay PG4 Property _No CR76 John Kay PG16 CR56 CR56 CR56 Aline Stewart PG4 Aline Stewart PG36 Aline Stewart PG16 PAddress RentStart RentFinish Rent 6 Lawrence Street, Glasgow 5 Novar Drive, Glasgow 6 Lawrence Street, Glasgow 2 Manor Road, Glasgow 5 Novar Drive, Glasgow Owner _No Oname 1-Jul-93 31-Aug-95 350 CO40 Tina Murphy 1-Sep-95 1-Sep-96 450 CO93 Tony Shaw 1-Sep-23 10-June-9 3 350 CO40 Tina Murphy 10-Oct-93 1-Dec-94 375 CO93 Tony Shaw 1-Jan-95 10-Aug-95 450 CO93 Tony Shaw