Normalointi vs denormalisointi
Relaatiotietokannat koostuvat suhteista (liittyvät taulukot). Taulukot koostuvat sarakkeista. Jos taulukot ovat kaksi suurta (eli liian monta saraketta yhdessä taulukossa), tietokannassa voi esiintyä poikkeavuuksia. Jos taulukot ovat kaksi pientä (eli tietokanta koostuu useista pienemmistä taulukoista), se olisi tehotonta kyselyihin. Normalisointi ja denormalisointi ovat kaksi prosessia, joita käytetään tietokannan suorituskyvyn optimointiin. Normalisointi minimoi tietotaulukoissa esiintyvät redundanssit. Denormalisointi (normalisoinnin käänteinen) lisää redundantteja tietoja tai ryhmätietoja.
Mitä on normalisointi?
Normalointi on prosessi, joka suoritetaan relaatiotietokantojen tiedoissa esiintyvien redundanssien minimoimiseksi. Tämä prosessi jakaa suuret taulukot pääasiassa pienempiin taulukoihin, joissa on vähemmän redundanssia (kutsutaan "normaaliksi lomakkeeksi"). Nämä pienemmät taulukot liittyvät toisiinsa hyvin määriteltyjen suhteiden kautta. Hyvin normalisoidussa tietokannassa kaikki tietojen muuttaminen tai muokkaus edellyttää vain yhden taulukon muokkaamista. Ensimmäisen normaalimuodon (1NF), toisen normaalimuodon (2NF) ja kolmannen normaalimuodon (3NF) esitteli Edgar F. Codd. Boyce-Codd Normal Form (BCNF) esitteli vuonna 1974 Codd ja Raymond F. Boyce. Korkeammat normaalimuodot (4NF, 5NF ja 6NF) on määritelty, mutta niitä käytetään harvoin.
1NF:n mukainen taulukko varmistaa, että se todella edustaa relaatiota (eli se ei sisällä toistuvia tietueita), eikä se sisällä relaatioarvoisia attribuutteja (ts.e. kaikilla määritteillä tulee olla atomiarvoja). Jotta taulukko olisi 2NF:n mukainen, sen tulee olla 1NF:n mukainen ja minkä tahansa attribuutin, joka ei ole osa ehdokasavainta (eli ei-prime-attribuutit), tulee riippua täysin mistä tahansa taulukon ehdokasavaimesta. Coddin määritelmän mukaan taulukon sanotaan olevan 3NF-muodossa, jos ja vain jos tämä taulukko on toisessa normaalimuodossa (2NF) ja jokaisen taulukon attribuutin, joka ei kuulu ehdokasavaimeen, tulisi suoraan riippua jokaisesta taulukon ehdokasavain. BCNF (tunnetaan myös nimellä 3.5NF) kaappaa joitakin poikkeavuuksia, joita 3NF ei korjaa.
Mitä denormalisointi on?
Denormalisointi on normalisointiprosessin käänteinen prosessi. Denormalisointi toimii lisäämällä redundantteja tietoja tai ryhmittelemällä tietoja suorituskyvyn optimoimiseksi. Vaikka ylimääräisen datan lisääminen kuulostaa kielteiseltä, joskus denormalisointi on erittäin tärkeä prosessi, jotta voidaan voittaa joitakin relaatiotietokantaohjelmiston puutteita, jotka voivat aiheuttaa raskaita suorituskykyrangaistuksia normalisoiduilla tietokannoilla (jopa viritetty korkeampaan suorituskykyyn). Tämä johtuu siitä, että useiden suhteiden yhdistäminen (jotka ovat normalisoinnin tuloksia) tuloksen tuottamiseksi kyselyyn voi joskus olla hidasta tietokantajärjestelmien todellisen fyysisen toteutuksen mukaan.
Mitä eroa on normalisoinnilla ja denormalisoinnilla?
– Normalisointi ja denormalisointi ovat kaksi täysin päinvastaista prosessia.
– Normalisointi on prosessi, jossa suuremmat taulukot jaetaan pienempiin redundanttien tietojen vähentämiseksi, kun taas denormalisointi on prosessi, jossa lisätään ylimääräistä dataa suorituskyvyn optimoimiseksi.
– Normalisointi suoritetaan tietokantojen poikkeamien estämiseksi.
– Denormalisointi suoritetaan yleensä tietokannan lukusuorituskyvyn parantamiseksi, mutta denormalisointiin käytettävien lisärajoitusten vuoksi kirjoittaminen (eli lisäys-, päivitys- ja poistotoiminnot) voi hidastua. Siksi denormalisoitu tietokanta voi tarjota huonomman kirjoitussuorituskyvyn kuin normalisoitu tietokanta.
– Usein suositellaan, että "normalisoi kunnes se sattuu, denormalisoi kunnes se toimii".