Upload
others
View
5
Download
0
Embed Size (px)
Citation preview
HAAGA-HELIA – TIKO / Digi-15 1 (27) Tietokannat ja Tiedonhallinta O.Virkki
swd03_S3_norm 17.8.2018 16:10:00
Normalisointi Normalisointi ................................................................ 2
Tavoitteet ................................................................. 2
Attribuuttien väliset riippuvuudet ................................. 4
1) Funktionaalinen vai Moniarvoinen riippuvuus? ........ 4
2) Täydellinen vai Osittainen riippuvuus ? .................. 6
3) Suora vai Epäsuora riippuvuus ? ........................... 7
1. Normaalimuoto ...................................................... 9
Miksi 1NF ? ........................................................... 12
2. Normaalimuoto .................................................... 13
Miksi 2NF ? ........................................................... 16
3. Normaalimuoto .................................................... 17
Miksi 3NF ? ........................................................... 20
Normalisointiprosessi ................................................ 21
3NF = Normalisoinnin tavoitetaso ! ............................. 22
Normalisointiesimerkki: Kurssihallinto ......................... 23
HAAGA-HELIA – TIKO / Digi-15 2 (27) Tietokannat ja Tiedonhallinta O.Virkki
swd03_S3_norm 17.8.2018 16:10:00
Normalisointi (Normalization)
Tavoitteet Relaatiotietokannasta saadaan relaatiomallin
mukainen Relaatioiden ja kohdealueen objektien välille
pyritään saamaan läheinen rakenteellinen vastaavuus
Minimoidaan tietokantaan sisältyvää toistoa Tietokannan päivitysten (lisäys, muutos, poisto)
yhteydessä mahdollisten ristiriitaisuuksien välttäminen
Relaatioiden riveistä pyritään saamaan lisäysten, poistojen ja muutosten kannalta mahdollisimman itsenäisiä kokonaisuuksia
Tietokannan mahdollisimman suuri rakenteellinen joustavuus tulevien muutosten mahdollistamiseksi
HAAGA-HELIA – TIKO / Digi-15 3 (27) Tietokannat ja Tiedonhallinta O.Virkki
swd03_S3_norm 17.8.2018 16:10:00
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
5NF 4NF BCNF 3NF 2NF 1NF
Kaikki relaatiot
3.normaalimuoto on normalisoinnin 'minimitaso' / tavoitetaso Ylempiä normaalimuotoja käsitellään syventävillä kursseilla
HAAGA-HELIA – TIKO / Digi-15 4 (27) Tietokannat ja Tiedonhallinta O.Virkki
swd03_S3_norm 17.8.2018 16:10:00
Attribuuttien väliset riippuvuudet
1) Funktionaalinen vai Moniarvoinen riippuvuus?
Vastaako tiettyä attribuuttin a arvoa yksi vai useampi attribuutin b arvo
Esim. vastaako attribuutin opiskelijanumero arvoa ’1234’ yksi vai useampi attribuutin sukunimi arvo?
Funktionaalinen riippuvuus
Jos attribuutin A arvo määrää yksikäsitteisesti attribuutin B arvon niin voidaan sanoa että …
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, vuosi -> työajankäyttö
HAAGA-HELIA – TIKO / Digi-15 5 (27) Tietokannat ja Tiedonhallinta O.Virkki
swd03_S3_norm 17.8.2018 16:10:00
Moniarvoinen riippuvuus Jos attribuutin A arvoon voi liittyä useita attribuutin B arvoja
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 (ja yleensä on) Toisesta suunnasta funktionaalinen Toisesta suunnasta moniarvoinen
Esim: Henkilötunnus <<--> hlön nimi Rekisterinumero <<--> auton merkki
HAAGA-HELIA – TIKO / Digi-15 6 (27) Tietokannat ja Tiedonhallinta O.Virkki
swd03_S3_norm 17.8.2018 16:10:00
2) Täydellinen vai Osittainen riippuvuus ? Onko jokainen pääavaimen attribuutti 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. Tuoteno --> tuotenimi Tilausno, tuoteno --> tilaus_maara
Huom! Osittaista riippuuvuutta on tarpeen tutkia vain, kun pääavain koostuu useammasta kuin yhdestä attribuutista!
HAAGA-HELIA – TIKO / Digi-15 7 (27) Tietokannat ja Tiedonhallinta O.Virkki
swd03_S3_norm 17.8.2018 16:10:00
3) Suora vai Epäsuora riippuvuus ? Määrääkö attribuutti A attribuutin C suoraan vai välillisesti attribuutin B kautta
Epäsuora eli Transitiivinen riippuvuus attribuutti C on transitiivisesti riippuva attribuutista A, jos ja vain jos A -> B ja B -> C
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
HAAGA-HELIA – TIKO / Digi-15 8 (27) Tietokannat ja Tiedonhallinta O.Virkki
swd03_S3_norm 17.8.2018 16:10:00
Normalisoinnissa tavoitellaan riippuvuuksia,
jotka ovat
Funktionaalisia Täydellisiä Suoria
HAAGA-HELIA – TIKO / Digi-15 9 (27) Tietokannat ja Tiedonhallinta O.Virkki
swd03_S3_norm 17.8.2018 16:10:00
1. Normaalimuoto 1NM (1 Normal Form, 1NF)
Relaatio on 1. normaalimuodossa jos (ja vain jos) sen jokainen arvoalue sisältää ainoastaan atomaarisia arvoja
ts. attribuuttia ei voi jakaa mielekkäisiin osiin Relaation on oltava kaksiulotteinen:
1. Relaatiossa ei saa olla toistuvia attribuutteja
Moniarvoiset attribuutit on purettava omiksi relaatioikseen
2. Relaation jokainen attribuutti on jakamaton kokonaisuus
HAAGA-HELIA – TIKO / Digi-15 10 (27) Tietokannat ja Tiedonhallinta O.Virkki
swd03_S3_norm 17.8.2018 16:10:00
Esim. TUTTAVA (tuttava_id, tut_nimi, tut_vuosi) TAPAAMINEN1 (tapaamis_id, paikan_nimi, pvm, al_aika, osoite, tuttava_id1, tuttava_id2, tuttava_id3, …, tuttava_id10) TAPAAMINEN2 (tapaamis_id, paikan_nimi, pvm, al_aika, osoite, tuttava_lista)
TUTTAVA TUTTAVA_ID TUT_NIMI TUT_VUOSI ake Akseli Mäkelä 2001 make Kerälä Martti 2002 pera PERTTI Järvinen 2006
TAPAAMINEN1 TAPAAMIS_ID PAIKAN_NIMI PVM AL_AIKA OSOITE TUTTAVA_ID1 TUTTAVA_ID2 … TUTTAVA_ID10 001 Vanha 1.2.2010 18:00 Mansku 3,
Helsinki ake make
002 Uusi 1.9.2010 19:00 Mansku 5 HKI
ake
TAPAAMINEN2 TAPAAMIS_ID PAIKAN_NIMI PVM AL_AIKA OSOITE TUTTAVA_LISTA 001 Vanha 1.2.2010 18:00 Mansku 3,
Helsinki ake, make PERA
002 Uusi 1.9.2010 19:00 Mansku 5 HKI
ake
Millaisia ongelmia datassa näyttäisi olevan ?
ei 1NF !
HAAGA-HELIA – TIKO / Digi-15 11 (27) Tietokannat ja Tiedonhallinta O.Virkki
swd03_S3_norm 17.8.2018 16:10:00
1NF:
TUTTAVA (tuttava_id, etunimi, sukunimi, tut_vuosi, …) TAPAAMINEN (tapaamis_id, paikan_nimi, pvm, al_aika, katuosoite, postitmp) TAVATTU(tapaamis_id, tuttava_id)
TUTTAVA TUTTAVA_ID ETUNIMI SUKUNIMI TUT_VUOSI ake Akseli Mäkelä 2001 make Martti Kerälä 2002 pera Pertti Järvinen 2006
TAPAAMINEN TAPAAMIS_ID PAIKAN_NIMI PVM AL_AIKA OSOITE POSTITMP 001 Vanha 1.2.2010 18:00 Mansku 3 Helsinki 002 Uusi 1.9.2010 19:00 Mansku 5 Helsinki
TAVATTU TAPAAMIS_ID TUTTAVA_ID 001 ake 001 make 001 pera 002 ake
HAAGA-HELIA – TIKO / Digi-15 12 (27) Tietokannat ja Tiedonhallinta O.Virkki
swd03_S3_norm 17.8.2018 16:10:00
Miksi 1NF ?
Minkälaisen kyselyn joutuisit tekemään etsiäksesi tapaamiset tuttavan ’ake’ kanssa ? (normalisoimattomissa vaihtoehdoissa)
Mitä jos useasti tapaamasi tuttava vaatii, että hänen
tuttava_id:nsä on muutettava. Miten tiedon muuttaminen onnistuisi ? (normalisoimattomissa vaihtoehdoissa)
Mitä, jos tapaamiseen osallistuu useampi tuttava,
kuin mihin on varauduttu ? (TAPAAMINEN1:ssä)
~ Normalisoimattomaan relaatioon liittyviä hankaluuksia
HAAGA-HELIA – TIKO / Digi-15 13 (27) Tietokannat ja Tiedonhallinta O.Virkki
swd03_S3_norm 17.8.2018 16:10:00
2. Normaalimuoto 2NM (2 Normal Form, 2NF)
Relaatio on 2. normaalimuodossa jos (ja vain jos) se on 1NF:ssa ja jokainen avaimeen kuulumaton attribuutti on täydellisesti riippuvainen avaimesta Ts. avaimen osa ei saa riittää identifioimaan jotakin relaation attribuuteista
Avaimen osasta riippuvat attribuutit esitetään omana relaationaan Huom! 2. normaalimuotoa on tarpeen tutkia vain, kun pääavain koostuu useammasta kuin yhdestä attribuutista!
HAAGA-HELIA – TIKO / Digi-15 14 (27) Tietokannat ja Tiedonhallinta O.Virkki
swd03_S3_norm 17.8.2018 16:10:00
Esim: tuttavalla voi olla monta eri harrastusta, harrastuksella voi olla tyyppi, esim. urheilu, taide, …
TUTTAVAN_HARRASTUS(tuttava_id, harrastus, harrastustyyppi)
TUTTAVA TUTTAVA_ID HARRASTUS HARRASTUSTYYPPI ake kitaransoitto musiikki make ilmakitaransoitto leikki ake juokseminen urheilu make juokseminen urheilu pera juokseminen URHEILU ake laulu musiikki pera pingis urheilu
Millaisia ongelmia datassa näyttäisi olevan ?
ei 2NF !
HAAGA-HELIA – TIKO / Digi-15 15 (27) Tietokannat ja Tiedonhallinta O.Virkki
swd03_S3_norm 17.8.2018 16:10:00
2NF:
TUTTAVAN_HARRASTUS(tuttava_id, harrastus)
HARRASTUS( harrastus, harrastustyyppi)
TUTTAVAN_HARRASTUS TUTTAVA_ID HARRASTUS ake kitaransoitto make ilmakitaransoitto pera juokseminen make juokseminen ake laulu pera sarjakuvat
HARRASTUS HARRASTUS HARRASTUSTYYPPI kitaransoitto musiikki ilmakitaransoitto leikki juokseminen urheilu laulu musiikki sarjakuvat keräily
HAAGA-HELIA – TIKO / Digi-15 16 (27) Tietokannat ja Tiedonhallinta O.Virkki
swd03_S3_norm 17.8.2018 16:10:00
Miksi 2NF ?
Kuinka moneen kertaan harrastuksen tyyppi pitää tallentaa tietokantaan ?
Jos harrastuksen tyyppi tulikin kirjattua väärin,
moneenko relaatioon korjaus on tallennettava ?
tietylle harrastukselle saattaa kirjautua eri harrastustyyppejä tietokantaan ?
~ Normalisoimattomaan relaatioon liittyviä hankaluuksia
HAAGA-HELIA – TIKO / Digi-15 17 (27) Tietokannat ja Tiedonhallinta O.Virkki
swd03_S3_norm 17.8.2018 16:10:00
3. Normaalimuoto 3NM (3 Normal Form, 3NF)
Relaatio on 3. normaalimuodossa jos (ja vain jos) se on 2NF:ssa ja mikään sen avaimeen kuulumattomista attribuuteista ei ole avaimesta epäsuorasti riippuvainen Ts. ei-avaimena oleva attribuutti ei saa riippua avaimen lisäksi jostakin muusta, ei-avaimena olevasta attribuutista Siirrä attribuutit, jotka riippuvat avaimen lisäksi jostakin ei-avaimena olevasta attribuutista omaksi relaatiokseen
HAAGA-HELIA – TIKO / Digi-15 18 (27) Tietokannat ja Tiedonhallinta O.Virkki
swd03_S3_norm 17.8.2018 16:10:00
Esim: TAPAAMINEN (tapaamis_id, paikan_nimi, pvm, al_aika, katuosoite, kunta)
TAPAAMINEN TAPAAMIS_ID PAIKAN_NIMI PVM AL_AIKA OSOITE POSTITMP 001 Vanha 1.2.2010 18:00 Mansku 3 Helsinki 002 Uusi 1.9.2010 19:00 Mansku 5 Helsinki 003 Vanha 1.10.2010 19:00 Mansku 3 Helsinki 004 Vanha 1.12.2010 10:00 Mansku 3 Helsinki
ei 3NF !
HAAGA-HELIA – TIKO / Digi-15 19 (27) Tietokannat ja Tiedonhallinta O.Virkki
swd03_S3_norm 17.8.2018 16:10:00
3NF:
TAPAAMINEN (tapaamis_id, paikan_nimi, pvm, al_aika) PAIKKA (paikan_nimi, katuosoite, kunta) huomaa että viiteavaimen on säilyttävä
TAPAAMINEN TAPAAMIS_ID PAIKAN_NIMI PVM AL_AIKA 001 Vanha 1.2.2010 18:00 002 Uusi 1.9.2010 19:00 003 Vanha 1.10.2010 19:00 004 Vanha 1.12.2010 10:00
PAIKKA PAIKAN_NIMI OSOITE POSTITMP Vanha Mansku 3 Helsinki Uusi Mansku 5 Helsinki
HAAGA-HELIA – TIKO / Digi-15 20 (27) Tietokannat ja Tiedonhallinta O.Virkki
swd03_S3_norm 17.8.2018 16:10:00
Miksi 3NF ? Kuinka moneen kertaan osoitetiedot joudutaan
kirjoittamaan ? Kun lisätään uusi tapaaminen tuttuun paikaan,
joudutaan osoite kirjoittamaan yhä uudelleen Jos vanhoja tapaamisia poistetaan tietokannasta,
miten voi käydä tiedon jonkin paikan osoitteesta ?
~ Normalisoimattomaan relaatioon liittyviä hankaluuksia
HAAGA-HELIA – TIKO / Digi-15 21 (27) Tietokannat ja Tiedonhallinta O.Virkki
swd03_S3_norm 17.8.2018 16:10:00
Normalisointiprosessi
Normalisoimaton muoto
Pura rakenteiset attribuutit & Siirrä toistuvat / moniarvoiset attribuutit omaksi relaatiokseen
1NF (atomaariset attribuutit)
Poista epätäydellinen riippuvuus ts. Siirrä attribuutit jotka riippuvat pääavaimen osasta omaksi relaatiokseen
2NF (täydellinen riippuvuus koko avaimesta)
Poista transitiivinen riippuvuus ts. Siirrä attribuutit, jotka riippuvat pääavaimen lisäksi jostakin pääavaimeen kuulumattomasta attribuutista omaksi relaatiokseen
3NF (attribuutit keskenään riippumattomia)
HAAGA-HELIA – TIKO / Digi-15 22 (27) Tietokannat ja Tiedonhallinta O.Virkki
swd03_S3_norm 17.8.2018 16:10:00
3NF = Normalisoinnin tavoitetaso ! 1. Yksilöivä avain 2. Ei toistuvia tai rakenteellisia attribuutteja 3. Ei riippuvuutta pääavaimen osasta 4. Attribuutit 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
HAAGA-HELIA – TIKO / Digi-15 23 (27) Tietokannat ja Tiedonhallinta O.Virkki
swd03_S3_norm 17.8.2018 16:10:00
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, toteutusno, opino, arvosana)
HAAGA-HELIA – TIKO / Digi-15 24 (27) Tietokannat ja Tiedonhallinta O.Virkki
swd03_S3_norm 17.8.2018 16:10:00
OPETTAJA OPENO OPE_NIMI OPE_TUTKINTO OPE_PUH1 OPE_PUH2 111 Taina Torikas FM 09 123 040 123 222 Lainelin Lasse FM 040 234 333 Olga Osuva FL 09 345 040 567 666 Kurkela Kalle DI 09 456, 09 678 040 987
OPISKELIJA OPINO OPI_NIMI OSOITE AL_VUOSI 123 Heikki Herala Jokitie 3, 03100 Vantaa 2010 234 Isotalo Isa Jokitie 1 03100 VANTAA 2009 345 Jukka Jutila Jokitie 3; 03100 VANDA 2010 456 Kurkela Katja Meritie 2, 02100 ESPoo 2010
KURSSI KURSSINO TOTEUTUSNO KURSSI_NIMI VASTUU_OPENO OPETTAVA_OPENO LAAJUUS AL_PVM ICT05 1 Tiedonhallinta ja Tietokannat 333 111 6 10.1.2010 ICT05 2 Tiedonhallinta ja Tietokannat 333 333 6 20.1.2010 ICT03 50 Tieto ja tiedon varastointi 222 666 12 20.9.2009
OSALLISTUMINEN KURSSINO TOTEUTUSNO OPINO ALRVOSANA ICT05 1 123 3 ICT05 1 234 4 ICT03 50 123 5 Millaisia ongelmia datassa näyttäisi olevan ?
HAAGA-HELIA – TIKO / Digi-15 25 (27) Tietokannat ja Tiedonhallinta O.Virkki
swd03_S3_norm 17.8.2018 16:10:00
1NF: 1. Pääavain määrää funktionaalisesti muut attribuutit 2. Ei rakenteellisia attribuutteja OPETTAJA(openo, ope_snimi, ope_enimi, ope_tutkinto) OPE_PUH(openo, ope_puh) OPISKELIJA(opino, opi_snimi, opi_enimi, aloitus_vuosi, katuos, postino, kunta) KURSSI(kurssino, toteutusno, kurssin_nimi, vastuu_openo, opettava_openo, laajuus, aloitus_pvm) OSALLISTUMINEN(kurssino, toteutusno, opino, arvosana)
HAAGA-HELIA – TIKO / Digi-15 26 (27) Tietokannat ja Tiedonhallinta O.Virkki
swd03_S3_norm 17.8.2018 16:10:00
2NF: ~ Jokainen attribuutti riippuu koko pääavaimesta
(ei sen osasta) OPETTAJA(openo, ope_snimi, ope_enimi, ope_tutkinto) OPE_PUH(openo, ope_puh) OPISKELIJA(opino, opi_snimi, opi_enimi, aloitus_vuosi, katuos, postino, kunta) KURSSITOTEUTUS(kurssino, toteutusno, opettava_openo, aloitus_pvm) KURSSI(kurssino, kurssin_nimi, vastuu_openo, laajuus) OSALLISTUMINEN(kurssino, toteutusno, opino, arvosana)
HAAGA-HELIA – TIKO / Digi-15 27 (27) Tietokannat ja Tiedonhallinta O.Virkki
swd03_S3_norm 17.8.2018 16:10:00
3NF: ~ Jokainen attribuutti riippuu vain pääavaimesta
(ei muista attribuuteista) OPETTAJA(openo, ope_snimi, ope_enimi, ope_tutkinto) OPE_PUH(openo, ope_puh) OPISKELIJA(opino, opi_snimi, opi_enimi, 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 !