3NF vs BCNF
Normalisering er en proces, der udføres for at minimere de redundanser, der er til stede i data i relationelle databaser. Denne proces vil hovedsageligt opdele store tabeller i mindre tabeller med færre redundanser. Disse mindre tabeller vil være relateret til hinanden gennem veldefinerede relationer. I en velnormaliseret database vil enhver ændring eller modifikation af data kun kræve ændring af en enkelt tabel. Third Normal Form (3NF) blev introduceret i 1971 af Edgar F. Codd, som også er opfinderen af den relationelle model og begrebet normalisering. Boyce-Codd Normal Form (BCNF) blev introduceret i 1974 af Codd og Raymond F. Boyce.
Hvad er 3NF?
3NF er den tredje normalform, der bruges i relationel databasenormalisering. Ifølge Codd's definition siges en tabel at være i 3NF, hvis og kun hvis den tabel er i den anden normale form (2NF), og hver attribut i tabellen, der ikke hører til en kandidatnøgle, skulle direkte afhænge af hver kandidatnøgle i den tabel. I 1982 producerede Carlo Zaniolo en anderledes udtrykt definition for 3NF. Tabeller, der overholder 3NF, indeholder generelt ikke uregelmæssigheder, der opstår ved indsættelse, sletning eller opdatering af poster i tabellen.
Hvad er BCNF?
BCNF (også kendt som 3.5NF) er en anden normal form, der bruges i relationel databasenormalisering. Det blev indført for at fange nogle af de anomalier, som ikke er rettet af 3NF. En tabel siges at være i BCNF, hvis og kun hvis, for hver af afhængighederne af formen A → B, der er ikke-trivielle, A er en supernøgle. At dekomponere en tabel, der ikke er i BCNF-normalformen, garanterer ikke produktionen af tabeller i BCNF-formen (samtidig med at de afhængigheder, som var til stede i den oprindelige tabel) bevares.
Hvad er forskellen mellem 3NF og BCNF?
Både 3NF og BCNF er normale former, der bruges i relationelle databaser for at minimere redundans i tabeller. I en tabel, der er i BCNF-normalformen, for hver ikke-triviel funktionel afhængighed af formen A → B, er A en supernøgle, hvorimod en tabel, der overholder 3NF, skal være i 2NF, og hver ikke-prime attribut bør direkte afhænge af hver kandidatnøgle i den tabel. BCNF betragtes som en stærkere normal form end 3NF, og den blev udviklet til at fange nogle af de anomalier, der ikke kunne fanges af 3NF. At opnå en tabel, der overholder BCNF-formularen, vil kræve nedbrydning af en tabel, der er i 3NF. Denne nedbrydning vil resultere i yderligere joinoperationer (eller kartesiske produkter), når forespørgsler udføres. Dette vil øge beregningstiden. På den anden side ville de tabeller, der overholder BCNF, have færre redundanser end tabeller, der kun overholder 3NF. Ydermere er det for det meste muligt at opnå en tabel, der overholder 3NF uden at hindre afhængighedsbevarelse og tabsfri sammenføjning. Men det er ikke altid muligt med BCNF.