Toinen normaalimuoto (2NF) määritelmä, kriteerit ja esimerkit
Toinen normaalimuoto (second normal form, 2NF) on relaatiomallin, erityisesti taulukoiden, ominaisuus, joka on tietokannan normalisoinnin kriteeri.
Toisen normaalimuodon ensimmäinen kriteeri on, että taulukko on ensimmäisen normaalimuodon mukainen.
Toisessa normaalimuodossa olevan taulukon sisällä kunkin rivin jokaisen sarakkeen tiedot ovat riippuvaisia kunkin rivin koko ensisijaisesta avaimesta. Ensisijainen avain on yksi tai useampi rivin sarake, jota käytetään kyseisen taulukon rivin tunnistamiseen ja indeksointiin. Sarakkeet, jotka eivät liity kaikkiin pääavaimen sarakkeisiin, poistetaan. Vain sarakkeet, jotka liittyvät kaikkiin pääavaimen sarakkeisiin, säilytetään.
Määritelmä ja avainkäsitteet
Toinen normaalimuoto (2NF) tarkoittaa sitä, että taulukko on ensin 1NF-tilassa ja lisäksi siinä ei ole osittaista riippuvuutta (partial dependency). Osittainen riippuvuus syntyy, kun taulukossa on yhdistelmäpääavain (komposiittiavaimena useampi sarake) ja jokin ei-avain-sarake riippuu vain osasta tätä yhdistelmäavainta, ei koko avaimesta.
Tärkeimmät käsitteet:
- Komposiittiavain: ensisijainen avain, joka koostuu useammasta sarakkeesta.
- Täydellinen funktionaalinen riippuvuus: sarake A on täysin riippuvainen avainjoukosta K, jos A riippuu koko K:sta eikä vain osasta sitä.
- Osittainen riippuvuus: sarake riippuu vain osasta komposiittiavainta — tällainen riippuvuus rikkoo 2NF:n.
Kriteerit, jotka taulukon on täytettävä ollakseen 2NF
- Taulukko on ensimmäisen normaalimuodon (1NF) mukainen (rivit yksilölliset, sarakkeet atomaareja).
- Jos taulukossa on yksittäinen sarake pääavainena, 2NF on silloin automaattisesti toteutunut, koska osittaista riippuvuutta ei voi olla.
- Jos taulukossa on komposiittiavain, jokaisen ei-avain-sarakkeen on oltava täysin riippuvainen koko pääavaimesta — ei pelkästään osasta sitä.
Esimerkki: osittainen riippuvuus ja korjaus
Esimerkki taulukosta ennen normalisointia:
OpiskelijaID | KurssiID | OpiskelijaNimi | KurssiNimi | Arvosana |
---|---|---|---|---|
1 | 101 | Maija | Tietokannat | 5 |
2 | 101 | Antti | Tietokannat | 4 |
Tässä taulukossa pääavain voisi olla (OpiskelijaID, KurssiID). Sarake Arvosana riippuu koko avaimesta — arvosana määräytyy opiskelijan ja kurssin yhdistelmän perusteella. Sen sijaan OpiskelijaNimi riippuu vain OpiskelijaID:stä ja KurssiNimi vain KurssiID:stä. Nämä ovat osittaisia riippuvuuksia ja rikkoivat 2NF:n.
Korjaus tehdään jakamalla taulukko kolmeen: Opiskelija, Kurssi ja Ilmoittautuminen (jossa on komposiittiavain ja arvosanat).
- Opiskelija(OpiskelijaID, OpiskelijaNimi)
- Kurssi(KurssiID, KurssiNimi)
- Ilmoittautuminen(OpiskelijaID, KurssiID, Arvosana) — tässä (OpiskelijaID, KurssiID) on pääavain ja muut sarakkeet riippuvat koko avaimesta.
Kuinka viedä taulukko 2NF:ään (vaiheittain)
- Tunnista taulukon pääavain. Onko se yksisarakkeinen vai komposiittiavaiminen?
- Jos komposiittiavain, tarkista jokaisen ei-avain-sarakkeen riippuvuus: riippuuko se koko avaimesta vai vain osasta?
- Jos löytyy osittaista riippuvuutta, siirrä ne riippuvaiset sarakkeet uuteen taulukkoon, jossa niillä on oma avain (esim. osa komposiittiavaimesta tai uusi yksilöllinen avain).
- Toista kunnes kaikki taulukon sarakkeet ovat täysin riippuvaisia pääavaimesta.
Huomioitavaa ja rajoitukset
- 2NF käsittelee vain osittaista riippuvuutta; se ei poista transitiivista riippuvuutta (se, mitä 3NF käsittelee). Siksi 2NF voi edelleen sisältää rakenteellisia ongelmia, jotka vaativat lisänormalisointia.
- Normalisointi parantaa tietojen eheyden ja vähentää redundanssia, mutta voi lisätä taulukoiden määrää ja näin ollen liittyvien (JOIN) operaatioiden tarvetta suorituskyvyssä. Suunnittelussa tehdään usein kompromisseja suorituskyvyn ja datan eheyden välillä.
- Jos taulukon pääavain on yksittäinen sarake, 2NF on automaattisesti toteutunut, mutta kannattaa silti tarkistaa mahdolliset muut riippuvuudet ja tarpeen mukaan jatkaa kohti 3NF:ää tai BCNF:ää.
Yhteenvetona: toinen normaalimuoto poistaa osittaiset riippuvuudet, jotka syntyvät erityisesti silloin, kun käytetään komposiittiavainta. Tavoitteena on varmistaa, että jokainen ei-avain-sarake riippuu täysin koko pääavaimesta, mikä vähentää päällekkäisyyttä ja parantaa tietokannan eheyttä.