Data Modeling & Schema Design

Higher Normal Forms and Decomposition

Beyond BCNF, multivalued and join dependencies expose relations that combine independent many-valued facts. Decomposition is useful only when joins reconstruct exactly the legal information and important constraints remain enforceable.
  • A lossless decomposition reconstructs exactly the original relation.
  • Dependency preservation asks whether constraints can be checked without joining decomposed relations.
  • Fourth normal form separates independent multivalued facts.
  • Fifth normal form addresses nontrivial join dependencies not implied by keys.
  • 3NF synthesis favors dependency preservation, while BCNF decomposition may sacrifice it for stronger redundancy control.
  • A join that happens to reproduce one sample is not proof of losslessness for every legal instance.

Lossless versus lossy decomposition

Original `PRODUCT_CATEGORY(product_id, category_id, category_label)`
product_idcategory_idcategory_label
P1C10Shoes
P2C11Shoes
Two decompositions and their joins
DecompositionShared determinantJoin result
PRODUCT_CATEGORY(product_id, category_id) + CATEGORY(category_id, category_label)category_id → category_labelLossless: each category ID restores its one label
PRODUCT_LABEL(product_id, category_label) + CATEGORY_LABEL(category_id, category_label)category_label is not uniqueLossy when multiple categories share a label; product/category combinations are invented
Lossy projections and their natural join on `category_label`
Stageproduct_idcategory_idcategory_labelStatus
PRODUCT_LABEL projectionP1ShoesProjected original tuple
PRODUCT_LABEL projectionP2ShoesProjected original tuple
CATEGORY_LABEL projectionC10ShoesProjected original tuple
CATEGORY_LABEL projectionC11ShoesProjected original tuple
Natural joinP1C10ShoesOriginal tuple
Natural joinP1C11ShoesSpurious tuple
Natural joinP2C10ShoesSpurious tuple
Natural joinP2C11ShoesOriginal tuple
Separating two independent multivalued facts
When category and supplier choices are independent, 4NF stores each relationship once instead of materializing their cross-product.