A non-trivial dependency violates BCNF when its left side is not a superkey.

highlighted = computed this step

BCNF violation

BCNF asks every non-trivial dependency to have a superkey on its left side. If the left side is not a superkey, the dependency can describe repeated facts that belong in a smaller relation. The compiler finds violations by recomputing superkey status from closure. Note: the violating dependency appears in the decomposition tree.

BCNF checks left side superkeys\text{BCNF checks left side superkeys}

Violating dependency

The compiled schema has 1 BCNF violation and decomposes into 2 pieces. Note: the render shows which dependency caused the split.

violations=1,pieces=2\text{violations}=1,\quad \text{pieces}=2

FD closure, candidate keys, BCNF decomposition, and lossless-join checks are exact finite computations on tiny schemas; dependency inference beyond these traces and physical schema design tradeoffs are beyond this book - no product claims.

BCNF violationABCB->CBCBCNFABBCNF decompositionschemaABBC

Summary

A BCNF violation is not guessed from prose; it is found by closure and superkey recomputation. Note: this book proves exact behavior on finite schemas, while practical dependency discovery and physical design tradeoffs remain outside the model.

violation by recompute\text{violation by recompute}