What is BCNF?
In other words, no non-prime attribute should depend on anything other than a super key.
Why BCNF?
-
Even in 3NF, sometimes anomalies (redundancy, update issues) still exist if a dependency’s determinant is not a candidate key.
-
BCNF fixes this stricter condition.
Example (Not in BCNF)
Consider a relation:
R(StudentID, Course, Instructor)
Functional dependencies (FDs):
-
StudentID, Course → Instructor (because a student in a course has a specific instructor)
-
Instructor → Course (each instructor teaches only one course)
Candidate key: (StudentID, Course)
Check dependencies:
So relation is not in BCNF.
Decomposition to BCNF
We decompose into:
-
R1(Instructor, Course)
-
R2(StudentID, Instructor)
-
Here, candidate key = (StudentID, Instructor).
-
All FDs satisfied → BCNF.
Now, both relations are in BCNF.
Key Idea
-
3NF allows: a non-prime attribute to depend on another non-prime, if it’s part of a transitive dependency.
-
BCNF does not allow this. Every determinant must be a candidate key.