Question bank — Normalization — 1NF, 2NF, 3NF, BCNF — anomalies each resolves
Before we start, one shared vocabulary reminder so no symbol sneaks in undefined:
True or false — justify
Every item below is a statement people confidently believe. Decide true/false and give the reason.
Higher normal form is always the better design choice.
A table with a single-column primary key is automatically in 2NF.
If a table has no visually repeated data, it must be in BCNF.
Every relation in 3NF is also in BCNF.
Teacher → Subject survives 3NF (Subject is prime) but fails BCNF.Every relation in BCNF is also in 3NF.
1NF is only about strings that look like lists.
phone1, phone2, phone3), and sets — not just comma-separated strings.Normalization can never remove information from the database.
If and , then and are interchangeable as determinants.
A trivial dependency like can violate BCNF.
Reaching 3NF guarantees all your original functional dependencies are still enforceable.
Spot the error
Each item states a claim with a hidden mistake. Reveal the correction.
"Teacher → Subject is fine because Subject is prime, so the table is fully normalized."
Teacher is not a superkey. "Prime" saves 3NF, not BCNF."The table Enroll(StudentID, CourseID, Grade, StudentName) is in 2NF because every column holds a single value."
StudentID → StudentName is a partial dependency on part of the key {StudentID, CourseID}."2NF violations happen because the table has too many columns."
"Emp(EmpID, DeptID, DeptCity) with EmpID → DeptID → DeptCity violates 2NF."
EmpID, so no partial dependency is possible; the problem is the transitive dependency through the non-prime middleman DeptID."To fix a transitive dependency, delete the middleman column."
Dept(DeptID, DeptCity) stores the fact once; Emp(EmpID, DeptID) keeps the link. Deleting DeptID would lose the connection."An FD is just any correlation you notice in the sample data."
"Since {Student, Subject} is a candidate key, Subject is non-prime."
Subject is part of a candidate key, so it is prime. Prime means "belongs to some candidate key," and {Student, Subject} is exactly such a key.Why questions
Answer with the mechanism, not a definition restatement.
Why does an update anomaly happen at all?
Why does 2NF only "bite" tables with composite keys?
Why is BCNF strictly stronger than 3NF rather than a different flavor?
Why can decomposing into BCNF sometimes lose a functional dependency?
Why do insert anomalies signal a missing table rather than missing data?
TeacherSubject exists precisely so a teacher's subject can be stored before any student enrolls.Why is "normalize to the highest form possible" bad engineering advice?
Why do candidate keys, not just the primary key, matter for BCNF?
{Student, Teacher} would make you misjudge which attributes are prime.Edge cases
The corners the topic quietly assumes you'll handle.
A relation with only two columns R(A, B) and the single FD A → B — which normal forms hold?
A is the only candidate key and is a superkey, so A → B satisfies BCNF, and there are no composite keys or transitive chains to worry about.A relation where every attribute is prime (all-key relation, e.g. R(A, B, C) with key {A,B,C} and no non-trivial FDs).
A table currently holding zero rows — can it violate a normal form?
Teacher → Subject still violates BCNF by design.A dependency where is already part of (e.g. ).
A relation that is in 3NF, is dependency-preserving, but is not in BCNF.
Teach(Student, Subject, Teacher) case. Its Teacher → Subject blocks BCNF, yet forcing BCNF would split the FDs so one can't be checked locally — so 3NF is the best we keep while preserving all FDs.Two different candidate keys overlapping on a shared column — does that break normalization?
Teach has {Student,Subject} and {Student,Teacher} sharing Student, which is why both Subject and Teacher count as prime.What if a determinant is itself a full candidate key — does its FD ever violate BCNF?
X → A with X a key passes BCNF trivially. Violations always come from non-key determinants.Recall One-line self-test before you leave
Cover the answers and say the reason aloud for each: Why is a single-column-key table always 2NF? Why does 3NF ⊄ BCNF? Why can BCNF lose an FD? Why is a single-column-key table always 2NF? ::: No proper subset of a one-column key exists, so no partial dependency can form. Why is 3NF not always BCNF? ::: 3NF permits a non-superkey determinant when the determined attribute is prime; BCNF forbids that exception. Why can BCNF decomposition lose an FD? ::: The columns of an FD can end up split across tables, so the dependency can no longer be checked without a join.