Jos olet työskennellyt tietokantojen parissa jonkin aikaa, olet todennäköisesti kuullut termin normalisointi. Ehkä joku kysyi sinulta: «Onko tietokanta normalisoitu?» tai «Onko se BCNF:ssä?» Standardointia pidetään usein luksusta, johon vain akateemikot ehtivät. Normalisoinnin periaatteiden tunteminen ja niiden soveltaminen päivittäisiin tietokannan suunnittelutehtäviin ei kuitenkaan ole niin monimutkaista, ja se voi parantaa merkittävästi DBMS:n suorituskykyä. Tässä artikkelissa esittelemme normalisoinnin käsitteen ja tarkastellaan lyhyesti yleisimpiä normaalimuotoja.
Mitä on normalisointi?
Normalisointi on prosessi, jossa tiedot järjestetään tehokkaasti tietokannassa. Normalisointiprosessilla on kaksi tavoitetta: poistaa ylimääräiset tiedot (esimerkiksi tallentaa samat tiedot useampaan kuin yhteen taulukkoon) ja varmistaa, että tietoriippuvuudet ovat järkeviä (tallentaa vain asiaan liittyvät tiedot taulukkoon). Molemmat ovat arvokkaita tavoitteita, koska ne vähentävät tietokannan viemää tilaa ja varmistavat, että tiedot tallennetaan loogisesti.
Normaalit muodot
Tietokantayhteisö on kehittänyt joukon ohjeita tietokantojen normalisoinnin varmistamiseksi. Näitä kutsutaan normaaleiksi muodoiksi ja ne on numeroitu yhdestä (alin normalisoinnin muoto, jota kutsutaan ensimmäiseksi normaalimuodoksi tai 1NF) viiteen (viides normaalimuoto tai 5NF). Käytännön sovelluksissa näet usein 1NF, 2NF ja 3NF sekä satunnaiset 4NF. Viides normaalimuoto nähdään hyvin harvoin, eikä sitä käsitellä tässä artikkelissa. Ennen kuin aloitamme keskustelun normaaleista muodoista, on tärkeää huomauttaa, että nämä ovat vain ohjeita ja ohjeita. Joskus tästä on tarpeen poiketa käytännön liiketoiminnan vaatimusten täyttämiseksi. Jos vaihtelua kuitenkin esiintyy, on välttämätöntä arvioida niiden vaikutukset järjestelmään ja ottaa huomioon mahdolliset epäjohdonmukaisuudet. Tarkastellaanpa normaaleja muotoja.
Ensimmäinen normaalimuoto (1NF)
Ensimmäinen normaalimuoto (1NF) määrittelee perussäännöt organisoidulle tietokannalle:
- Poista päällekkäiset sarakkeet samasta taulukosta.
- Luo erilliset taulukot kullekin liittyvien tietojen ryhmälle ja tunnista jokainen rivi yksilöivällä sarakkeella tai sarakejoukolla (ensisijainen avain).
Toinen normaalimuoto (2NF)
Toinen normaalilomake (2NF) tarkentaa edelleen päällekkäisten tietojen poistamisen käsitettä:
- Täytä kaikki ensimmäisen normaalilomakkeen vaatimukset.
- Poista tietojen osajoukot, jotka koskevat useita taulukon rivejä, ja sijoita ne erillisiin taulukoihin.
- Luo suhteita näiden uusien taulukoiden ja niiden edeltäjien välille vieraita avaimia käyttämällä.
Kolmas normaalimuoto (3NF)
Kolmas normaalimuoto (3NF) menee tärkeän askeleen pidemmälle:
- Täytä kaikki toisen normaalilomakkeen vaatimukset.
- Poista sarakkeet, jotka eivät riipu ensisijaisesta avaimesta.
Boyce-Coddin normaalimuoto (BCNF tai 3,5NF)
Boyce-Coddin normaalimuoto, joka tunnetaan myös nimellä «kolmas ja puolikas (3.5) normaalimuoto», lisää vielä yhden vaatimuksen:
- Täytä kaikki kolmannen normaalilomakkeen vaatimukset.
- Jokaisen determinantin on oltava ehdokasavain.
Neljäs normaalimuoto (4NF)
Lopuksi neljännellä normaalimuodolla (4NF) on lisävaatimus:
- Täytä kaikki kolmannen normaalilomakkeen vaatimukset.
- Suhde on 4NF:ssä, jos sillä ei ole moniarvoisia riippuvuuksia.
Muista, että nämä standardointiohjeet ovat kumulatiivisia. Jotta tietokanta olisi 2NF:ssä, sen on ensin täytettävä kaikki 1NF-tietokannan kriteerit.
Pitääkö minun normalisoida?
Vaikka tietokannan normalisointi on usein hyvä idea, se ei ole ehdoton vaatimus. Joissakin tapauksissa standardoinnin sääntöjen tahallinen rikkominen on hyvä käytäntö. Jos haluat varmistaa, että tietokanta on normalisoitu, aloita oppimalla asettamaan tietokanta ensimmäiseen normaalimuotoon.