TIETOKANNAN NORMALISOINTI JA NORMAALIMUODOT A271117, Tietokannat Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: Leon Atkinson: core MySQL Ari Hovi: SQL-opas TTY:n tietokantojen perusteet-kurssin opintomoniste Eri web-lähteet Tietokannan normalisointi Menetelmä, jolla pyritään minimoimaan saman tiedon tallettaminen useaan kertaan Poistetaan redundanssi (redundancy) Samalla pystytään välttämään tiettyjä ongelmia tietokannan tietosisällön käytössä ja päivittämisessä Jos tietokannassa on sama tieto useassa paikassa, niin voi olla vaikeaa pitää kaikki tietoinstanssit ajan tasalla Eheys (data integrity, consistency) 1
Tietokannan normalisointi Normalisoinnilla voi myös olla suorituskykyyn negatiivinen vaikutus Suorituskykyä voidaan toisaalta parantaa denormalisoinnilla tämä täytyy tehdä harkiten! Normaalimuotoja on olemassa useita (6 + BCNF + DKNF) Yleensä järkevä vähimmäisvaatimus on kolmas normaalimuoto 1. normaalimuoto Ensimmäinen normaalimuoto (1NF) vaatii jokaisen taulun sarakkeen arvot ovat atomisia eli alkiona ei voi olla tietoryhmä (tai toinen relaatio) Siirretään toistuvat kentät omiksi tauluikseen Harjoitus : miten seuraava taulu saataisiin 1NF-muotoon? Opiskelija_ID Etunimi Sukunimi Ryhmä Aloitusvuosi Tutkinnon laajuus 000123 Olli Opiskelija TITE-99 1999 240 000124 Outi Opiskelija TITE-99 1999 240 000125 Ilona Insinööri TITE-98 1998 240 2
Toinen normaalimuoto (2NF) vaatii relaatio on 1NF:ssa jokainen relaation ominaisuus, joka ei ole avainominaisuus, on täydellisesti (funktionaalisesti) riippuva jokaisesta relaation avainehdokkaasta yleensä, jos jokainen relaation avain koostuu vain yhdestä attribuutista, niin relaatio täyttää 2NF:n siis kaikkien sarakkeiden pitää olla riippuvaisia koko avaimesta Funktionaalinen riippuvuus: F(A)=B siten, että jokaista A:n arvoa kohti on yksi B:n arvo. Kun tiedetään A, niin tiedetään B:kin Henkilötunnus identifioi henkilön nimen: Henkilötunnus Henkilön nimi 3
Siirretään ei-riippuvat kentät omiksi tauluikseen Ryhmä Opiskelija_ID Etunimi Sukunimi Osoite TITE-99 000123 Olli Opiskelija Opiskelijankatu 21 A 1 Ryhmä Aloitusvuosi Tutkinnon laajuus TITE-99 1999 240 TITE-99 000124 Outi Opiskelija Opiskelijankatu 21 A 2 TITE-98 000125 Ilona Insinööri Insinöörinkatu 11 B TITE-98 1998 240 Opiskelijan osoite ei riipu ryhmästä ositetaan kahteen tauluun (ryhmän tiedot jäävät ennalleen) Ryhmä Opiskelija_ID Opiskelija_ID Etunimi Sukunimi Osoite TITE-99 000123 TITE-99 000124 TITE-98 000125 000123 Olli Opiskelija Opiskelijankatu 21 A 1 000124 Outi Opiskelija Opiskelijankatu 21 A 2 000125 Ilona Insinööri Insinöörinkatu 11 B 3. normaalimuoto Kolmas normaalimuoto (3NF) vaatii relaatio on 2NF:ssa yhdestäkään relaation ominaisuudesta, joka ei ole avainominaisuus, ei riipu muita relaation ominaisuuksia Siis: kaikkien sarakkeiden tulee riippua vain pääavaimesta Siirretään ei-riippuvat kentät omiksi tauluikseen Kaikki relaatiot vähintään kolmanteen normaalimuotoon! All fields must depend on the key, the whole key and nothing but the key. So help me Codd. 4
3. normaalimuoto Opiskelija_ID Etunimi Sukunimi Osoite Postinumero Postitoimipaikka 000123 Olli Opiskelija Opiskelijankatu 21 A 1 38300 Hervanta 000124 Outi Opiskelija Opiskelijankatu 21 A 2 38300 Hervanta 000125 Ilona Insinööri Insinöörinkatu 11 B 38100 Tampere Postitoimipaikka ei riipu pääavaimesta Postinumeroita ja toimipaikkoja ei voida tallettaa ennen opiskelijoiden tallettamista Jos viimeinen Hervannassa asuva opiskelija poistetaan, niin tieto postinumerosta ja toimipaikastakin häviää. Ositetaan Opiskelija_ID Etunimi Sukunimi Osoite Postinumero Postinumero Postitoimipaikka 000123 Olli Opiskelija Opiskelijankatu 21 A 1 38300 000124 Outi Opiskelija Opiskelijankatu 21 A 2 38300 000125 Ilona Insinööri Insinöörinkatu 11 B 38100 38300 Hervanta 38100 Tampere 5