Canonical Cover of Functional Dependencies in DBMS (original) (raw)

Last Updated : 24 Apr, 2026

Managing a large set of functional dependencies can result in unnecessary computational overhead. This is where the canonical cover becomes useful.

**Note: An attribute in a functional dependency is considered extraneous if it can be removed without altering the closure of the set of functional dependencies.

Steps to Find Canonical Cover

The process of finding the canonical cover of a set of functional dependencies involves the following steps:

Step 1: Decompose Functional Dependencies

1. Remove an attribute A from X to form X′.
2. Compute the closure of F with X′ ->Y instead of X ->Y.
3. If the closure remains unchanged, A is extraneous.

1. Remove an attribute B from Y.
2. Compute the closure of F with X ->Y′, where Y′ is Y without B.
3. If the closure remains unchanged, B is extraneous.

Step 3: Check for Redundant Dependencies

1. Temporarily remove FD from F.
2. Compute the closure of the remaining set.
3. If the closure is the same as the closure of the original set, FD is redundant and can be removed.

Step 4: Combine Functional Dependencies with the Same Left-Hand Side

Step 5: Verify the Final Canonical Cover

1. The left-hand side has no extraneous attributes.
2. The right-hand side contains only one attribute.

Illustrative Examples

Example 1:

Consider a set of Functional dependencies: F = {A -> BC, B -> C, AB -> C}. Here are the steps to find the canonical cover

**Step 1: Combine Functional Dependencies with the Same Left-Hand Side, that is no two functional dependencies in F have the same left-hand side, so no changes are needed at this stage.

**Step 2: Eliminate Extraneous Attributes

Split A ->BC into A ->B and A ->C.
Now, F = {A ->B, A ->C, B ->C, AB ->C}.

**Step 3: Decompose Functional Dependencies

**Step 4: Check for Redundant Dependencies

**Step 5: The final canonical cover is Fc ={ A-> B, B-> C}. This is the simplified set of functional dependencies that has the same closure as the original set F.

Example 2:

Given F = { A -> BC, CD -> E, B -> D, E ->A }

How to Check Whether a Set of FDs F Canonically Covers Another Set of FDs G?

To verify whether a set of functional dependencies (F) canonically covers another set of functional dependencies (G), follow these steps:

Step 1: Compute the Closure of Each Set

Step 2: Compare the Closures

For F to canonically cover G, the following conditions must hold:

1. The closure of F must be equivalent to the closure of G.
2. That is, for every functional dependency in G, it must be derivable from F and vice versa.

Step 3: Derive Dependencies in G from F

For each functional dependency in G (e.g., X-> Y):

1. Compute X+ (closure of X) under F.
2. Verify that Y ⊆ X+.
3. If this is true for all functional dependencies in G, F covers G.

Step 4: Derive Dependencies in F from G

To ensure F and G are equivalent, For each dependency in FF (e.g., X -> Y):

1. Compute X+ (closure of X) under G.
2. Check that Y ⊆ X+. If all dependencies in F can be derived from G, the two sets are equivalent.

Step 5: Verify Minimality (Optional)

If F is already minimal (e.g., no extraneous attributes or redundant dependencies) and it satisfies the above steps, then F is a canonical cover of G.

**Example: Let F = {A-> B, B-> C} and G = {A-> BC}.

1. G can be derived from F: A-> BC is equivalent to A-> B and B-> C.
2. F can be derived from G: A-> B and B-> C are derivable from A-> BC.

Since F and G have the same closure and F is minimal, F canonically covers G.

Features of the Canonical Cover