BCNF (Boyce-Codd Normal Form) is a stricter normalization level than 3NF. A relation is in BCNF if it is already in 3NF and every functional dependency X → Y is such that X is a super key (i.e., X contains a candidate key).

In simpler terms, in BCNF, only keys should determine non-key attributes; no non-key attribute should determine anything else.

Why BCNF Exists

BCNF fixes some subtle problems that 3NF may still allow:

  • 3NF permits a functional dependency where the determinant is a non-key attribute, as long as the determined attribute is part of a candidate key.

  • BCNF removes even this case, making dependencies cleaner and more predictable.

Rules of BCNF

A table is in BCNF when:

  • It is already in 3NF.

  • For every functional dependency:

X → Y

the set X is a super key (i.e., X+ includes all attributes of the table).

If a functional dependency violates this, the table must be decomposed to remove the violation.

Example of BCNF

Consider a TEACHES table:

Course_ID, Professor_ID, Course_Name

Assume functional dependencies:

Course_ID → Course_Name

Course_Name → Course_ID

and:

{Course_ID, Professor_ID}

is the primary key.

Here, both Course_ID → Course_Name and Course_Name → Course_ID are allowed under 3NF but not under BCNF if neither Course_ID alone nor Course_Name alone is a key.

To bring this into BCNF, split into:

COURSE(Course_ID, Course_Name)

TEACHES(Course_ID, Professor_ID)

Now, each table contains only dependencies where the left side is a key.

How to Achieve BCNF

Check each functional dependency:

X → Y
  • If X is not a super key, the table is not in BCNF.

  • Decompose the table using the violating FD to create smaller relations.

  • Repeat until all tables satisfy BCNF.

Why BCNF Matters?

  • It is stricter than 3NF and removes more subtle anomalies.

  • It ensures that only super keys determine attributes, making the schema very clean.

  • BCNF schemas are often used when data integrity is critical, even though they may introduce more tables and joins.

Summary

BCNF in DBMS requires that every functional dependency has a determinant that is a super key. It is a tighter normalization level than 3NF and is used to eliminate certain types of dependencies that can still cause anomalies. For beginners, BCNF represents a “stronger” form of normalization that ensures keys are the only drivers of dependencies in the database.