Normal Form | Removes | Definition (Key Difference) | Lossless Decomposition? | Dependency Preservation? |
|---|---|---|---|---|
1NF | Repeating groups / multivalued attributes | Relation has only atomic values (no arrays, no nested sets). | Trivial (just flattening) | Yes |
2NF | Partial dependencies | Must be in 1NF AND no non-prime attribute depends on part of a candidate key. | Yes | Yes |
3NF | Transitive dependencies | Must be in 2NF AND every non-prime attribute depends directly on a candidate key (no dependency via another non-prime attribute). | Yes | Yes |
BCNF | All remaining redundancy from FDs | Must be in 3NF AND for every FD X → Y, X must be a superkey. | Yes | ❌ Not always (dependency preservation may be lost) |
Example to Illustrate
Suppose relation:
R(StudentID, CourseID, StudentName, DeptID, DeptName)
FDs:
-
(StudentID, CourseID) → StudentName, DeptID
-
DeptID → DeptName
-
1NF: Relation already atomic.
-
2NF: Remove partial dependency
StudentID → StudentName.
→ Split into: Student(StudentID, StudentName), Enrollment(StudentID, CourseID, DeptID). -
3NF: Remove transitive dependency
DeptID → DeptName.
→ Split into: Department(DeptID, DeptName), Enrollment(StudentID, CourseID, DeptID). -
BCNF: If any FD still has determinant that’s not a superkey (e.g., DeptID → DeptName in some cases), further decomposition is needed.
Key Insights
-
2NF handles partial dependencies.
-
3NF handles transitive dependencies.
-
BCNF handles cases where even in 3NF, determinants aren’t superkeys.
-
All decompositions are lossless.
-
Dependency preservation:
-
2NF ✅
-
3NF ✅
-
BCNF ❌ (sometimes you lose some dependencies and need to check them by joining relations).
-