Lataa esitys
Esittely latautuu. Ole hyvä ja odota
JulkaistuSakari Korpela Muutettu yli 9 vuotta sitten
1
Normalisointi Normalisointi liittyy ”bottom-up” –menetelmään.
Normalisoinnissa aloitetaan tutkimalla attribuuttien välisiä yhteyksiä. Aiemmin esitetyssä ER-mallinnuksessa normalisointia voidaan käyttää validointitehtäviin. Jos hyvin käy, niin normalisoinnin avulla lopullinen malli täyttää asetetut rajoitukset ja vältytään datan turhalta redundanssilta, päällekkäisyydeltä. Normalisointi tMyn
2
Normalisoinnin tavoitteet lyhykäisesti:
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 (lisäys-, päivitys- 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 Normalisointi tMyn
3
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 5 NF 4 NF BCNF 3 NF 2 NF 1 NF KAIKKI RELAATIOT Normalisointi tMyn
4
Normalisoitu malli kuvaa hyvin todellisuutta ja on stabiili.
Kun tauluja suunnitellaan, niin helposti voi syntyä datan redundanssia (=sama tieto esiintyy taulussa turhan usein). Tästä redundanssista voi tulla hankalia ongelmia esim. sellaisessa tilanteessa jossa tietoa päivitetään (=update anomalies) . Otetaan esimerkkinä taulut Henkilokunta(hloNro, sNimi, asema, palkka, tpNro), Toimipiste(tpNro, tpOsoite) ja hkToimipiste(hloNro, sNimi, asema, palkka, tpNro, tpOsoite), kuva 1. Normalisointi tMyn
5
Henkilokunta Toimipiste hkToimipiste
Kuva 1. Hankaluudet tiedon päivittämisessä. Normalisointi tMyn
6
Taulu hkToimipiste on vaihtoehtoinen esitys kahdelle taululle Henkilokunta ja Toimipiste.
Huomataan, että taulussa hkToimipiste on redundanssia. tpOsoite esiintyy aina silloin kun henkilökuntaan kuuluva esitellään. Katsotaan seuraavaksi tyypillisiä ongelmia (update anomalies) hkToimipiste-tyylisissä tauluissa. Lisätään tietoa tauluun (insertion anomaly). Kun lisätään uusi henkilö hkToimipiste-tauluun, joudutaan samalla lisäämään toimipisteeseen liittyvät tiedot. Jos olisi erikseen taulu Toimipiste, niin tällaista ongelmaa ei olisi. Normalisointi tMyn
7
Toinen ongelma samassa (insertion anomalies) tilanteessa: Yritetään lisätä uusi toimipiste hkToimipiste-tauluun. Siinä ei vielä ole henkilökuntaa. Siispä pitäisi antaa arvo NULL sarakkeeseen hloNro. Se on kuitenkin taulun hkToimipiste perusavain (primary key)! Tiedon lisäämiseen liittyvä sivuvaikutus siis ilmenee silloin, kun jonkin kohteen ilmentymän lisääminen edellyttää toisen kohteen ilmentymän lisäämistä. Kyseistä tietoa ei ole voitu tallentaa aiemmin, koska tiedot ovat toisistaan siten riippuvaisia, että ne on talletettava samanaikaisesti. Normalisointi tMyn
8
Entäpä jos poistetaan rivi SA9 (Minna Auvinen) taulusta hkToimipiste
Entäpä jos poistetaan rivi SA9 (Minna Auvinen) taulusta hkToimipiste? Seurauksena olisi se, että toimipisteen B007 (Mannerheimintie 15, Helsinki) tiedot häviäisivät samalla kertaa (deletion anomaly)! Tiedon poistamiseen liittyvä sivuvaikutus ilmenee siis silloin, kun yhden kohdetyypin jonkin ilmentymän poistaminen aiheuttaa tahattomasti toisen kohteen tietojen tuhoutumisen. Normalisointi tMyn
9
Kolmantena ongelmana taulussa hkToimipiste on toimipisteen attribuutin arvon muuttaminen. Jospa vaikka toimipiste B003 Kuopiossa muuttaa Makrillitie 6:sta Makrillitie 5:een. Tuo tieto tulisi muuttaa kolmeen kohtaan taulussa hkToimipiste (modification anomaly)! Yllä olevan perusteella voidaan jo todeta, että tauluilla Henkilokunta ja Toimipiste on haluttavampia ominaisuuksia kuin mitä on taululla hkToimipiste. Yksi iso taulu jaettiin kahteen pienempään. Tällöin kaikki se tieto mikä löytyi yhdestä isosta löytyy edelleenkin näistä kahdesta pienestä (lossless join). Normalisointi tMyn
10
Tällöin X on Y:n determinantti (determinant), X->Y.
Samaten kaikki ne rajoitteet (constraint) jotka ovat olleet voimassa alkuperäisessä taulussa voidaan asettaa voimaan näissä uusissa, pienemmissä tauluissa (dependency preservation). Normalisointiin liittyy käsite funktionaalinen riippuvuus (Functional Dependency) ja se on attribuuttien välinen suhde. Jos tietyn attribuutin X arvon perusteella voidaan osoittaa tai johtaa toisen attribuutin Y arvo, voidaan sanoa, että X:n arvo määrittää Y:n arvon ja Y on funktionaalisesti riippuvainen X:stä. Tällöin X on Y:n determinantti (determinant), X->Y. Normalisointi tMyn
11
Esim. henkilotunnus->henkilonNimi rekisterinumero->autonMerkki
Yleistys: X, Y->Z Esim. tilausNro, tuoteNro->tilausMaara Normalisointi tMyn
12
Taulusta Henkilokunta voidaan poimia vaikkapa hloNro SL21
Taulusta Henkilokunta voidaan poimia vaikkapa hloNro SL21. Tuo hloNro-tunnuksen avulla voidaan selvittää kyseisen henkilön asema (johtaja). Siis attribuutti asema on funktionaalisesti riippuvainen attribuutista hloNro. Sitä vastoin toiseen suuntaan tämä ei pidä paikkansa: henkilökunnan joukossa voi olla monta sellaista henkilöä, joiden asema on johtaja. Kun on löydetty funktionaaliset riippuvuudet relaatiosta, niin sen jälkeen voidaan näiden pohjalta valita perusavain relaatioon – ja määritellä muutenkin tarvittavat eheysvaatimukset. Normalisointi tMyn
13
Attribuuttien hloNro ja asema välinen yhteys (relationship) on 1:1 (one-to-one), siis kutakin hloNro:a kohti on vain yksi asema-arvo. Sitä vastoin attribuuttien asema ja hloNro välinen suhde on 1:* (one-to-many), koska on olemassa useita hloNro-arvoja kutakin asema-arvoa-kohti. Normalisoinnissa käytetään hyväksi relaation funktionaalisia riippuvaisuuksia sellaisten attribuuttien välillä joissa vallitsee 1:1 yhteys. Toisekseen näiden riippuvuuksien tulee olla voimassa koko ajan ja niiden tulee olla ei-triviaaleja. Normalisointi tMyn
14
Triviaali funktionaalinen riippuvuus:
Triviaalilla funktionaalisella riippuvuudella tarkoitetaan attribuutin riippuvuutta oman ylijoukkonsa (superset) kanssa. tyontekijaID, tyontekijaOsoite-> tyontekijaOsoite Normalisointi tMyn
15
Miten kaikki funktionaaliset riippuvuudet löydetään elävässä elämässä
Miten kaikki funktionaaliset riippuvuudet löydetään elävässä elämässä? Ei luultavammin oikeastaan mitenkään! Tavoitteena tuleekin olla löytää riittävä joukko funktionaalisia riippuvuuksia niin että ne kuvaavat relaation riittävän hyvin. Normalisointi tMyn
16
Normalisointi perustuu relaatioiden analysointiin perusavaimen ja funktionaalisten riippuvuuksien avulla. Normalisoinnissa käytetään joukkoa sääntöjä, joiden avulla relaatiota voidaan testata. Näin edeten tietokanta voidaan normalisoida haluttuun normaalimuotoon. Jos relaatio ei täytä jotakin ehtoa, niin ratkaisu saavutetaan jakamalla loogisesti itsenäiset ominaisuusryhmät omiksi relaatioikseen. Normalisointi etenee askel kerrallaan. Eteenpäin mentäessä relaatiot tulevat yhä vahvemmiksi ja tunnottomammiksi sivuvaikutuksille (anomalies). Normalisointi tMyn
17
Raakadatan hieno nimi on Unformalized form (UNF), kuva 2.
Ennen normalisointiprosessin alkua oletetaan, että kullakin relaatiolla on perusavain ja kaikki funktionaaliset riippuvuudet ovat tiedossa (hip!). Aluksi olisi syytä tehdä ER-malli ratkaistavasta ongelmasta, mutta ohitetaan se tässä ja aloitetaan raakadatasta, siis vaikkapa jostakin excel-taulusta. Raakadatan hieno nimi on Unformalized form (UNF), kuva 2. Normalisointi tMyn
18
asiakasVuokrattavat Kuva 2. Lähdetään liikkeelle normalisoimattomasta raakadatasta. Normalisointi tMyn
19
Jokaisella monikolla on ainakin yksi yksilöllinen attribuutti.
1. normaalimuoto, 1NF (First normal form), on taulu, jossa ei ole toistuvia monikkoja, rivejä. Jokaisella monikolla on ainakin yksi yksilöllinen attribuutti. Jokaisessa relaation alkiossa on vähintään ja enintään yksi arvo. Raakadatasta voidaan yleensä muuntaa 1. normaalimuotoon täydentämällä jokaisen taulun rivin ja sarakkeen risteykseen yksi arvo (flattening the table)… tämä aiheuttaa valitettavasti redundanssia. Valitaan perusavaimeksi sarakkeet asNro ja kohdeNro (composite key), kuva 3. Normalisointi tMyn
20
asiakasVuokrattavat Kuva 3. 1 NF, 1. normaalimuoto datasta.
Normalisointi tMyn
21
2. normaalimuoto sisältää käsitteen täydellinen funktionaalinen riippuvuus (Full Functional Dependency). Osittainen funktionaalinen riippuvuus (Partial Functional Dependency) tulee vastaan hieman myöhemmin. Y on täydellisesti funktionaalisesti riippuvainen X:stä jos pätee sekä se, että Y on funktionaalisesti riippuvainen X:stä ja se, että jos X koostuu kahdesta tai useammasta attribuutista, niin silloin minkä tahansa attribuutin tiputtaminen pois X:stä aiheuttaa sen, että Y ei enää olekaan funktionaalisesti riippuvainen X:stä. Normalisointi tMyn
22
Otetaan esimerkki funktionaalisesta riippuvuudesta
taulusta Henkilokunta: hloNro, sNimi -> tpNro Henkilokunta Normalisointi tMyn
23
On oikein sanoa, että kukin arvo (hloNro, sNimi) liittyy yksittäiseen arvoon tpNro. tpNro ei kuitenkaan ole täydellisesti funktionaalisesti riippuvainen (hloNro, sNimi)-arvosta, koska tpNro on myös funktionaalisesti riippuvainen (hloNro, sNimi):n osajoukosta, nimittäin hloNro:sta. Normalisointi 2. normaalimuotoon (2NF, Second Normal Form) kohdistetaan tauluihin, joissa perusavain koostuu ainakin kahdesta attribuutista (composite key). Jos taulun perusavain koostuu vain yhdestä attribuutista, niin se on silloin vähintäänkin 2. normaalimuodossa. Normalisointi tMyn
24
Jos taulu ei ole 2NF-muodossa, niin voi tulla ongelmia. Esim
Jos taulu ei ole 2NF-muodossa, niin voi tulla ongelmia. Esim. taulussa asiakasVuokrattavat: jos haluttaisiin muuttaa kohteen PG4 vuokra-arvoa, niin se tulisi tehdä kahteen paikkaan. Taulu on 2. normaalimuodossa, jos jokainen ei-perusavain –attribuutti on täysin riippuvainen perusavaimesta. Se voi kuitenkin myös olla riippuvainen toisesta, ei-perusavain –attribuutista (nk. transitiivinen riippuvuus). Tavoitteena on siis tässä vaiheessa osittaisten riippuvuuksien (partial functional dependencies) poistaminen. Normalisointi tMyn
25
Partial Functional Dependency: an attribute is dependent on only a part of a primary key.
A Transitive Functional Dependency is a type of functional dependency in which the value in a non-key field is determined by the value in another non-key field and that field is not a candidate key. Normalisointi tMyn
26
Osittainen funktionaalinen riippuvuus (Partial Functional Dependency):
Nyt siis perusavaimen osa (composite primary key) riittää identifioimaan osan relaation perusavaimeen kuulumattomista attribuuteista. Transitiivinen funktionaalinen riippuvuus (Transitive Functional Dependency): Määrääkö attribuutti A attribuutin C suoraan (ilman välittäviä attribuutteja) vai välillisesti ominaisuuden B kautta? Attribuutti C on transitiivisesti riippuva attribuutista A, jos ja vain jos A->B ja B->C ja lisäksi EI ole voimassa B->A eikä C->A. Normalisointi tMyn
27
Kiinnostuksen kohteina ovat funktionaaliset riippuvuudet, fr1-fr4.
Tutkitaan taulua kuvassa 1, asiakasVuokrattavat. Olkoot perusavaimena sarakkeet asNro ja kohdeNro. Kiinnostuksen kohteina ovat funktionaaliset riippuvuudet, fr1-fr4. Normalisointi tMyn
28
fr1 (Perusavain) fr2 (Osittainen riippuvuus) (Osittainen riippuvuus) fr3 fr4 (Transitiivinen riippuvuus) Kuva 4. Funktionaaliset riippuvuudet asiakasVuokrattavat-taulussa valitun perusavaimen (asNro, kohdeNro) suhteen. Normalisointi tMyn
29
Huomataan, että attribuutti asNimi on osittain riippuvainen perusavaimesta, siis ainoastaan osasta asNro, kts fr2. Attribuutit kohdeOsoite, vuokra, omistNro ja omistNimi ovat osittain riippuvaisia perusavaimesta, siis osasta kohdeNro, kts fr3. Attribuutit vuokrSAlk ja vuokrSLopp ovat täysin riippuvaisia perusavaimesta, kts. fr1. Huomataan, että asiakasVuokrattavat-taulussa on myös transitiivinen riippuvuussuhde (fr4), mutta se saa olla 2 NF-muodossa. Normalisointi tMyn
30
Koska siis osittaisia riippuvuussuhteita löytyi, niin ne poistetaan muodostamalla uusia tauluja.
Periaate: otetaan ei-perusavainsarakkeet pois yhdessä sen osuuden kanssa perusavaimesta, jonka (joiden) suhteen nämä ei-perusavainsarakkeet ovat täydellisesti riippuvaisia. Tämän seurauksena syntyy kolme taulua: Asiakas, Vuokrasuhde ja kohdeOmistaja, kuva 5. Näistä kukin on 2 NF –muodossa, koska jokainen ei-perusavain –attribuutti on täydellisesti funktionaalisesti riippuvainen perusavainattribuutista. Normalisointi tMyn
31
Vuokrasuhde Asiakas Kuva 5a. 2 NF –muodossa olevat taulut Asiakas ja Vuokrasuhde. Normalisointi tMyn
32
kohdeOmistaja Kuva 5b. 2 NF –muodossa oleva taulu Omistaja.
Normalisointi tMyn
33
Asiakas(asNro, asNimi)
Taulut ovat nyt seuraavassa muodossa (2 NF), perusavain alleviivattuna: Asiakas(asNro, asNimi) Vuokrasuhde(asNro, kohdeNro, vuokrSAlk, vuokrSLopp) kohdeOmistaja(kohdeNro, kohdeOsoite, vuokra, omistNro, omistNimi) Normalisointi tMyn
34
Vaikka taulut ovat nyt 2 NF –muodossa, niin vielä voi tulla ongelmia taulujen sisältöjä muutettaessa (update anomalies). Jos esim. taulussa kohdeOmistaja joudutaan modifioimaan omistNimi-sarakkeessa nimeä Kalle Savolainen, niin se tulisi tehdä kahdelle riville. Jos muutos tehtäisiin vain jompaankumpaan riviin, niin seurauksena olisi ristiriitainen taulun sisältö (inconsistent state). Edellä kuvattu uhkatilanne johtuu transitiivisesta riippuvuudesta (Transitive Functional Dependency). Normalisointi tMyn
35
Transitiivinen riippuvuus on voimassa seuraavassa tilanteessa: Olkoot A, B ja C relaation attribuutteja. Jos B on funktionaalisesti riippuvainen A:sta (A -> B) ja C on funktionaalisesti riippuvainen B:stä (B -> C) niin edellä mainittujen ehtojen vallitessa C on transitiivisesti riippuvainen A:sta attribuutin B kautta. Tämä sillä ehdolla, että A ei ole funktionaalisesti riippuvainen B:stä eikä C:stä. Normalisointi tMyn
36
Kun muistellaan alussa olevaa taulua, hkToimipiste, niin huomataan funktionaaliset riippuvuudet hloNro -> tpNro ja tpNro -> tpOsoite. Tässä transitiivinen riippuvuus hloNro -> tpOsoite esiintyy sarakkeen tpNro kautta. hkToimipiste Normalisointi tMyn
37
Palataan nyt tauluihin Asiakas, Vuokrasuhde ja kohdeOmistaja.
3. normaalimuoto, 3NF (Third normal form), on taulu, joka täyttää 1NF ja 2NF ehdot, ja lisäksi yksikään ei-perusavain –attribuutti ei ole transitiivisesti riippuvainen perusavaimesta. Palataan nyt tauluihin Asiakas, Vuokrasuhde ja kohdeOmistaja. Tauluissa Asiakas ja Vuokrasuhde ei ole transitiivisia riippuvuuksia ja ne ovat valmiiksi 2NF ehdot täyttäviä. Niinpä ne ovat valmiiksi myös 3NF ehdot täyttävässä muodossa. Normalisointi tMyn
38
Taulussa kohdeOmistaja on transitiivinen riippuvuus omistNro -> omistNimi. Muistetaan, että kyseisen taulun perusavain on kohdeNro. Poistetaan tämä riippuvuus (ja siis päästään 3NF muotoon) luomalla kaksi taulua, vuokrattavatKohteet ja Omistaja, kuva 6. Normalisointi tMyn
39
vuokrattavatKohteet Omistaja
Kuva 6. Taulun kohdeOmistaja muuttaminen 3NF –muotoon luomalla kaksi uutta taulua. Normalisointi tMyn
40
Asiakas(asNro, asNimi)
Voidaan sanoa, että 3 NF=normalisoinnin tavoitetaso. Yhteenvetona 3 NF –taulut ovat: Asiakas(asNro, asNimi) Vuokrasuhde(asNro, kohdeNro, vuokrSAlk, vuokrSLopp) vuokrattavatKohteet(kohdeNro, kohdeOsoite, vuokra, omistNro) Omistaja(omistNro, omistNimi) Normalisointi tMyn
Samankaltaiset esitykset
© 2024 SlidePlayer.fi Inc.
All rights reserved.