Introduction
When working with database rules called functional dependencies, it can get confusing if there are many overlapping or redundant rules. We need a simpler, cleaner set of rules that mean the same thing but are easier to use.
Imagine you have a long list of instructions to assemble a piece of furniture. Some instructions repeat the same steps or include unnecessary details. Creating a canonical cover is like rewriting the instructions to be shorter and clearer without missing any important steps.
┌───────────────────────────────┐
│ Original Functional Dependencies│
├───────────────┬───────────────┤
│ Remove │ Remove │
│ Extraneous │ Redundant │
│ Attributes │ Dependencies │
├───────────────┴───────────────┤
│ Combine dependencies with same │
│ left side into one │
├───────────────────────────────┤
│ Canonical Cover │
└───────────────────────────────┘canonical cover in database design?F = { A -> BC, B -> C, A -> B }F?A -> BC into A -> B and A -> C.B -> C exists, and A -> B exists, A -> C is implied and redundant.F = { A -> BC, B -> C }C from A -> BC because B -> C exists.C is extraneous in A -> BCB -> C exists, C can be derived from B, so C is extraneous on the right side of A -> BC.C from A -> BC to get A -> B is valid and simplifies the dependencies.C is extraneous in A -> BC -> Option BF = { AB -> C, A -> B, B -> C }F?AB -> C, check if A or B is extraneous. Since B -> C exists, A is extraneous.AB -> C to B -> C and remove redundant dependenciesF becomes { A -> B, B -> C }. This set is minimal and covers all dependencies.Pass the test and this pattern moves unknown