HELIA TIKO-05 1 (20) Normalisointi Normalisointi...2 Tavoitteet...2 Attribuuttien väliset riippuvuudet...4 Funktionaalinen / moniarvoinen riippuvuus...4 Täydellinen / osittainen riippuvuus...6 Suora / välillinen riippuvuus...7 1. Normaalimuoto...9 Miksi 1NF?... 10 2. Normaalimuoto... 11 Miksi 2NF?... 12 3. Normaalimuoto... 13 Miksi 3NF?... 14 Normalisointiprosessi... 15 3NF = Normalisoinnin tavoitetaso!... 16 Normalisointiesimerkki: Kurssihallinto... 17
HELIA TIKO-05 2 (20) Normalisointi (Normalization) 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 toisto (=redundanssia) Tietokannan päivitysten yhteydessä mahdollisten anomalioiden (=ei-toivottujen sivuvaikutusten) välttäminen (lisäys-, muutos- ja poistoanomalia) Relaatioiden riveistä pyritään tekemään lisäysten, poistojen ja muutosten kannalta itsenäisiä kokonaisuuksia Tietokannan mahdollisimman suuri rakenteellinen joustavuus tulevien muutosten mahdollistamiseksi
HELIA TIKO-05 3 (20) Normalisointi perustuu normaalimuotoihin (normal form) 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 3.normaalimuoto on normalisoinnin 'minimitaso' / tavoitetaso Ylempiä normaalimuotoja käsitellään syventävillä kursseilla
HELIA TIKO-05 4 (20) 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 TIKO-05 5 (20) 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 A -> B voimassaolo ei merkitse funktionaalisen riippuvuuden B -> A voimassaoloa Riippuvuus voi olla (ja yleensä on) Toisesta suunnasta funktionaalinen Toisesta suunnasta moniarvoinen Esim: Henkilötunnus <<--> nimi Rekisterinumero <<--> auton merkki
HELIA TIKO-05 6 (20) Täydellinen / osittainen riippuvuus Onko jokainen pääavaimen attribuutti mukana riippuvuudessa? Osittainen riippuvuus Pääavaimen osa riittää identifioimaan 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 TIKO-05 7 (20) Suora / välillinen riippuvuus Määrääkö attribuutti A attribuutin C suoraan vai välillisesti ominaisuuden B kautta Välillinen eli transitiivinen riippuvuus attribuutti C on välillisesti 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 TIKO-05 8 (20) Normalisoinnissa tavoitellaan riippuvuuksia, jotka ovat 1. Funktionaalisia 2. Täydellisiä 3. Suoria
HELIA TIKO-05 9 (20) 1. Normaalimuoto 1NM (1 Normal Form, 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 atomaarisia 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, tekijat, otsake, ) JULKAISU(julkaisuno, tekija1, tekija2,.., otsake, ) ei 1NF! 1NF: JULKAISU(julkaisuno, otsake, ) J_TEKIJA(julkaisuno, tekija, tekijan _i)
HELIA TIKO-05 10 (20) Miksi 1NF? Minkälaisen kyselyn joutuisit tekemään etsiäksesi Mielosen julkaisut? (normalisoimattomissa vaihtoehdoissa) Mitä, jos tietyn julkaisun 2. tekijä halutaan poistaa (esim. kirjoitusvirheen takia)? Mitä, jos tekijöitä onkin useampi, kuin mihin on varauduttu? ~ Normalisoimattomaan relaatioon liittyviä anomalioita
HELIA TIKO-05 11 (20) 2. Normaalimuoto 2NM (2 Normal Form, 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 2NF: TYOPANOS(projno, hlono, vuosi, kk, tunnit) HLO(hlono, hnimi, )
HELIA TIKO-05 12 (20) 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ä? ~ Normalisoimattomaan relaatioon liittyviä anomalioita
HELIA TIKO-05 13 (20) 3. Normaalimuoto 3NM (3 Normal Form, 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 riippua 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_TYO(hlono, tyopaikan_nimi, tyopaikan_os) Ei 3 NF.. 3NF: HLON_TYO(hlono, tyopaikan_nimi) TYOPAIKKA(tyopaikan_nimi, tyopaikan_os)
HELIA TIKO-05 14 (20) 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ää? ~ Normalisoimattomaan relaatioon liittyviä anomalioita
HELIA TIKO-05 15 (20) Normalisointiprosessi Normalisoimaton muoto Pura rakenteiset attribuutit. Poista moniarvoinen riippuvuus, 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 TIKO-05 O.Virkki 8.2.2007 16 (20) 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) Näitä käsitellään syventävillä kursseilla
HELIA TIKO-05 17 (20) Normalisointiesimerkki: Kurssihallinto Normalisoimaton kaava (0NF): OPETTAJA(openo, ope_nimi(etunimi, sukunimi), ope_tutkinto, ope_puh1, ope_puh2) OPISKELIJA(opino, opi_nimi(etunimi, sukunimi), aloitus_vuosi, osoite(katuos, postino, kunta)) KURSSI(kurssino, toteutusno, kurssin_nimi, vastuu_openo, opettava_openo, laajuus, aloitus_pvm) OSALLISTUMINEN(kurssino, toteutusno, opino, arvosana)
HELIA TIKO-05 18 (20) 1NF: 1. Pääavain määrää funktionaalisesti muut attribuutit 2. Ei rakenteellisia attribuutteja OPETTAJA(openo, ope_etunimi, ope_sukunimi, ope_tutkinto) OPE_PUH(openo, ope_puh) OPISKELIJA(opino, opi_etunimi, opi_sukunimi, aloitus_vuosi, katuos, postino, kunta) KURSSI(kurssino, toteutusno, kurssin_nimi, vastuu_openo, opettava_openo, laajuus, aloitus_pvm) OSALLISTUMINEN(kurssino, toteutusno, opino, arvosana)
HELIA TIKO-05 19 (20) 2NF: ~ Jokainen attribuutti riippuu koko pääavaimesta (ei sen osasta) OPETTAJA(openo, ope_etunimi, ope_sukunimi, ope_tutkinto) OPE_PUH(openo, ope_puh) OPISKELIJA(opino, opi_etunimi, opi_sukunimi, aloitus_vuosi, katuos, postino, kunta) KURSSITOTEUTUS(kurssino, toteutusno, opettava_openo, aloitus_pvm) KURSSI(kurssino, kurssin_nimi, vastuu_openo, laajuus) OSALLISTUMINEN(kurssino, toteutusno, opino, arvosana)
HELIA TIKO-05 20 (20) 3NF: ~ Jokainen attribuutti riippuu vain pääavaimesta (ei muista attribuuteista) OPETTAJA(openo, ope_etunimi, ope_sukunimi, ope_tutkinto) OPE_PUH(openo, ope_puh) OPISKELIJA(opino, opi_etunimi, opi_sukunimi, aloitus_vuosi, katuos, postino) POSTITMPK(postino, kunta) KURSSITOTEUTUS(kurssino, toteutusno, opettava_openo, aloitus_pvm) KURSSI(kurssino, kurssin_nimi, vastuu_openo, laajuus,) OSALLISTUMINEN(kurssino, toteutusno, opino, arvosana) Huolehdi että viiteavaimet (=yhteydet) säilyvät normalisoinnissa!