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 in 3NF.
For every functional dependency , the set is a super key (i.e., 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_NameCourse_Name → Course_ID{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 :
If 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.