Last modified: May 29, 2025
BCNF Decomposition
(recall BCNF: For every functional dependency X → Y
, X
must be a superkey)
Step 1
Check which functional dependencies of R are not in BCNF, if they're all in BCNF we do not need to decompose R.
AB -> CD
D -> E
A -> C
B -> D
{AB}+ = {A,B,C,D,E} -> CK: AB
AB -> CD
D -> E (violates BCNF)
A -> C
B -> D
Step 2
Create two sub-relations:
-
{X}+
-
R - {X}+ + X
AB -> CD
D -> E -> {D}+ = {D, E} -> R1(DE), R2(ABCD)
A -> C
B -> D
Step 3
For each sub-relation we check if all of its functional dependencies are now in BCNF
-
if they are we keep the sub-relation as it is
-
if not, do Step 2 again for the sub-relation's dependency that does not satisfy BCNF
R1(DE)
CK = D
D -> E (BCNF)
R2(ABCD)
CK = AB
AB -> CD (BCNF)
A -> C (not in BCNF)
B -> D
R3(AC)
CK = A
A -> C (BCNF)
R4(ABD)
CK = AB
AB -> D (BCNF)
B -> D (not in BCNF)
R5(BD)
CK = B
B -> D (BCNF)
R6(AB)
CK = AB
AB -> AB (BCNF)
Step 4
Final decomposition is composed of sub-relations that all their functional dependencies hold BCNF
R1(DE)
D -> E
R3(AC)
A -> C
R5(BD)
B -> D
R6(AB)
AB -> AB