3NF vs BCNF
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. Nämä pienemmät taulukot liittyvät toisiinsa hyvin määriteltyjen suhteiden kautta. Hyvin normalisoidussa tietokannassa kaikki tietojen muuttaminen tai muuttaminen edellyttää vain yhden taulukon muokkaamista. Kolmannen normaalimuodon (3NF) esitteli vuonna 1971 Edgar F. Codd, joka on myös relaatiomallin ja normalisoinnin käsitteen keksijä. Boyce-Codd Normal Form (BCNF) esitteli vuonna 1974 Codd ja Raymond F. Boyce.
Mikä on 3NF?
3NF on kolmas normaalimuoto, jota käytetään relaatiotietokannan normalisoinnissa. 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, pitäisi olla suoraan riippuvainen jokainen taulukon ehdokasavain. Vuonna 1982 Carlo Zaniolo tuotti eri tavalla ilmaistun määritelmän 3NF:lle. 3NF:n mukaiset taulukot eivät yleensä sisällä poikkeamia, joita esiintyy lisättäessä, poistettaessa tai päivitettäessä tietueita taulukkoon.
Mikä on BCNF?
BCNF (tunnetaan myös nimellä 3.5NF) on toinen normaali muoto, jota käytetään relaatiotietokannan normalisoinnissa. Se otettiin käyttöön joidenkin poikkeavuuksien vangitsemiseksi, joita 3NF ei käsittele. Taulukon sanotaan olevan BCNF:ssä, jos ja vain jos jokaiselle muodon A → B riippuvuudelle, joka ei ole triviaali, A on superavain. Sellaisen taulukon hajottaminen, joka ei ole BCNF-normaalimuodossa, ei takaa taulukoiden tuottamista BCNF-muodossa (samalla kun säilytetään alkuperäisessä taulukossa olleet riippuvuudet).
Mitä eroa on 3NF:n ja BCNF:n välillä?
Sekä 3NF että BCNF ovat normaaleja muotoja, joita käytetään relaatiotietokannoissa taulukoiden redundanssien minimoimiseksi. Taulukossa, joka on normaalimuodossa BCNF, jokaiselle ei-triviaalille funktionaaliselle riippuvuudelle muotoa A → B, A on superavain, kun taas taulukon, joka on 3NF:n mukainen, tulisi olla 2NF:ssä ja jokaisen ei-alkuluvun. attribuutin tulisi riippua suoraan jokaisesta taulukon ehdokasavaimesta. BCNF:ää pidetään vahvempana normaalimuotona kuin 3NF, ja se kehitettiin sieppaamaan joitakin poikkeavuuksia, joita 3NF ei pystynyt sieppaamaan. BCNF-lomakkeen mukaisen taulukon saaminen edellyttää 3NF:ssä olevan taulukon hajottamista. Tämä hajottaminen johtaa lisäliitosoperaatioihin (tai suorakulmaisiin tuotteisiin) kyselyitä suoritettaessa. Tämä lisää laskenta-aikaa. Toisa alta BCNF:n mukaisissa taulukoissa olisi vähemmän redundanssia kuin taulukoissa, jotka ovat vain 3NF:n mukaisia. Lisäksi suurimman osan ajasta on mahdollista saada taulukko, joka noudattaa 3NF:ää ilman, että se haittaa riippuvuuden säilymistä ja häviötöntä liittymistä. Mutta tämä ei aina ole mahdollista BCNF:n kanssa.