HELIA 1 (17) Luento 4.5 Normalisointi... 2 Tavoitteet... 2 Attribuuttien väliset riippuvuudet... 4 Funktionaalinen / moniarvoinen riippuvuus... 4 Transitiivinen / suora riippuvuus... 6 Täydellinen / osittainen riippuvuus... 7 Funktionaalisiin riippuvuuksiin liittyviä päättelysääntöjä... 8 1. Normaalimuoto 1NF... 9 Miksi 1NF?... 10 2. Normaalimuoto 2NF... 11 Miksi 2NF?... 12 3. Normaalimuoto 3NF... 13 Miksi 3NF?... 14 Normalisointiprosessi... 15 3NF = Normalisoinnin tavoitetaso!... 16 Normalisointiesimerkki: Kurssihallinto... 17
HELIA 2 (17) Normalisointi Tavoitteet J Relaatiotietokannasta saadaan relaatiomallin mukainen J Relaatioiden ja kohdealueen objektien välille pyritään saamaan läheinen rakenteellinen vastaavuus J Minimoidaan tietokantaan sisältyvää käsitteellistä ja talletettavista tiedoista aiheutuvaa redundanssia J Tietokannan päivitysten yhteydessä mahdollisten anomalioiden välttäminen (lisäys-, päivitys- ja poistoanomalia) J Relaatioiden riveistä pyritään tekemään lisäysten, poistojen ja muutosten kannalta itsenäisiä kokonaisuuksia J Tietokannan mahdollisimman suuri rakenteellinen joustavuus tulevien muutosten mahdollistamiseksi
HELIA 3 (17) 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 4 (17) Attribuuttien väliset riippuvuudet Funktionaalinen / moniarvoinen riippuvuus Vastaako attribuuttia a yksi vai useampi attribuutin b arvo Funktionaalinen riippuvuus Jos attribuutin A arvo määrää yksikäsitteisesti attribuutin B arvon niin B on funktionaalisesti riippuva A:sta A määrää B:n funktionaalisesti A -> B Vrt. Funktion käsite: funktio palauttaa aina yhden arvon Esim: Henkilötunnus --> hlo_nimi Rekisterinumero --> auton merkki Yleistys: A, B -> C Esim: Tilausno, tuoteno --> tilausmäärä Projektino, henkilono, kk --> työajankäyttö
HELIA 5 (17) Moniarvoinen riippuvuus Jos ominaisuuden A arvoon voi liittyä useita ominaisuuden B arvoja tavalla, joka ei riipu mistään 3. ominaisuudesta A ->> B Esim. projektino -->> henkilono osastono -->> projektino Yhteenveto: funktionaalinen / moniarvoinen riippuvuus Funktionaalinen riippuvuuden X -> Y voimassaolo ei merkitse funktionaalisen riippuvuuden Y -> X voimassaoloa Riippuvuus voi olla Toisesta suunnasta funktionaalinen Toisesta suunnasta moniarvoinen Esim: Henkilötunnus <<--> nimi Rekisterinumero <<--> auton merkki
HELIA 6 (17) 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 7 (17) Osittainen / täydellinen / riippuvuus Onko jokainen pääavaimen 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 kuulumatttomat attribuutit määräytyvät koko pääavaimen perusteella Esim. Tilausno, tuoteno --> tilaus_maara Tuoteno --> tuotenimi
HELIA 8 (17) Funktionaalisiin riippuvuuksiin liittyviä päättelysääntöjä Päättelysääntöjä voi käyttää relaatioiden yhdistämiseksi, (tavoitteena on sovellusalueen kuvaus pienimmällä mahdollisella relaatiomäärällä) Refleksiivisyys Jos Y X niin X -> Y Esim: otsake, vuosi -> otsake Esim: otsake -> otsake Ns. triviaali riippuvuus (riippuvuuden olemassaolo on itsestään selvää) Täydentäminen Ositus Unioni Jos X -> Y niin XZ -> YZ Jos X -> YZ niin X-> Y ja X -> Z Jos X -> Y ja X -> Z niin X -> YZ Transitiivisuus Jos X -> Y ja Y-> Z niin X -> Z Pseudo-transitiivisuus Jos X -> Y ja YW -> Z niin XW -> Z
HELIA 9 (17) 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, 1. Relaatiossa ei saa olla toistuvia attribuutteja Moniarvoiset ominaisuudet on purettava omiksi relaatioikseen 2. Relaation jokainen attribuutti on jakamaton kokonaisuus Esim. JULKAISU(julkaisuno, tekijät, otsake, ) JULKAISU(julkaisuno, tekijä1, tekijä2,.., otsake, ) ei 1NF! JULKAISU(julkaisuno, otsake, ) J_TEKIJA(julkaisuno, tekija, tekijän _i)
HELIA 10 (17) Miksi 1NF? Minkälaisen kyselyn joutuisit kirjoittamaan? Mitä, jos esim. 3. tekijä päätettäisiinkin poistaa? Mitä jos tekijöitä tulee useampi, kuin mihin on varauduttu?
HELIA 11 (17) 2. Normaalimuoto 2NF Relaatio R on 2. normaalimuodossa jos ja vain jos se on 1NF:ssa ja jokainen avaimeen kuulumaton 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, vuosi, kk, hnimi, tunnit) ei 2NF TYOPANOS(projno, hlono, vuosi, kk, tunnit) HLO(hlono, hnimi, )
HELIA 12 (17) Miksi 2NF? Kuinka moneen kertaan henkilön nimi pitää tallentaa tietokantaan? Miten tallennetaan henkilön nimi, jos hänelle ei ole kertynyt vielä lainkaan projektityötunteja? Jos henkilön nimi muuttuu, moneenko relaatioon muutos on tallennettava? Jos työpanostiedot päätetään poistaa projektin päättyessä, miten käy tiedolle henkilön nimestä?
HELIA 13 (17) 3. Normaalimuoto 3NF Relaatio R on 3. normaalimuodossa jos ja vain jos se on 2NF:ssa ja mikään sen avaimeen kuulumattomista 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 tai 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 eiavaimena olevasta ominaisuudesta omaksi relaatiokseen Esim: HLON_TYO(hlono, tyopaikan_nimi, tyopaikan_os) Ei 3 NF..
HELIA 14 (17) Miksi 3NF? Jos työpaikka muuttaa, moneenko kertaan uusi osoite joudutaan kirjoittamaan? Kun lisätään henkilö vanhalle työpaikalle, joudutaan työpaikan osoite kirjoittamaan yhä uudelleen Jos tietyn työpaikan henkilöstö irtisanoutuu, miten käy tiedon työpaikan osoitteesta? Miten lisätään uusi työpaikka, jos siellä ei vielä ole ensimmäistäkään työntekijää?
HELIA 15 (17) Normalisointiprosessi Normalisoimaton muoto Poista toistuvat ryhmät, ts. Siirrä moniarvoiset attribuutit omaksi relaatiokseen 1NF (ei toistuvia eikä rakenteisia attribuutteja) Poista epätäydellinen funktionaalinen riippuvuus ts. 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 ts. Siirrä attribuutit, jotka riippuvat pääavaimen lisäksi jostakin pääavaimeen kuulumattomasta ominaisuudesta omaksi relaatiokseen 3NF (ominaisuudet keskenään riippumattomia)
HELIA 16 (17) 3NF = Normalisoinnin tavoitetaso! 1. Yksilöivä avain 2. Ei toistuvia tai rakenteellisia attribuutteja 3. Ei epätäydellistä funktionaalista riippuvuutta 4. Ominaisuudet keskenään riippumattomia "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] Coddin alkuperäisessä määrittelyssä mukana vain 1NF, 2NF, 3NF Lisäksi myös Boyce-Codd normaalimuoto (BCNF) 4. Normaalimuoto (4NF) 5 normaalimuoto (5 NF)
HELIA 17 (17) Normalisointiesimerkki: Kurssihallinto OPETTAJA(openo, ope_nimi, ope_tutkinto, ope_puh1, ope_puh2) OPISKELIJA(opino, opi_nimi, aloitus_vuosi, osoite(katuos, postino, kunta)) KURSSI(kurssino, toteutusno, kurssin_nimi, vastuu_openo, opettava_openo, laajuus, aloitus_pvm) OSALLISTUMINEN(kurssino, opino, arvosana)