Canonical cover

A canonical cover $$F_c$$ for F (a set of functional dependencies on a relation scheme) is a set of dependencies such that F logically implies all dependencies in $$F_c$$, and $$F_c$$ logically implies all dependencies in F.

The set $$F_c$$ has two important properties:
 * 1) No functional dependency in $$F_c$$ contains an extraneous attribute.
 * 2) Each left side of a functional dependency in $$F_c$$ is unique. That is, there are no two dependencies $$a \to b$$ and $$c \to d$$ in $$F_c$$ such that $$a = c$$.

A canonical cover is not unique for a given set of functional dependencies, therefore one set F can have multiple covers $$F_c$$.

Algorithm for computing a canonical cover

 * 1) $$F_c = F$$
 * 2) Repeat:
 * 3) Use the union rule to replace any dependencies in $$F_c$$ of the form $$a \to b$$ and $$a \to d$$  with $$a \to bd$$  ..
 * 4) Find a functional dependency in $$F_c$$ with an extraneous attribute and delete it from $$F_c$$
 * 5) ... until $$F_c$$ does not change

Canonical cover example
In the following example, Fc is the canonical cover of F.

Given the following, we can find the canonical cover: R = (A, B, C, G, H, I) F = {A→BC, B→C, A→B, AB→C}


 * 1) {A→BC, B→C, A→B, AB→C}
 * 2) {A → BC, B →C, AB → C}
 * 3) {A → BC, B → C}
 * 4) {A → B, B →C}

Fc =  {A → B, B →C}

Extraneous Attributes
An attribute is extraneous in a functional dependency if its removal from that functional dependency does not alter the closure of any attributes.

Extraneous Determinant Attributes
Given a set of functional dependencies $$F$$ and a functional dependency $$A \rightarrow B$$ in $$F$$, the attribute $$a$$ is extraneous in $$A$$ if $$a \subset A$$ and any of the functional dependencies in $$(F-(A \rightarrow B) \cup { (A-a) \rightarrow B} ) $$ can be implied by $$F$$ using Armstrong's Axioms.

Using an alternate method, given the set of functional dependencies $$F$$, and a functional dependency X → A in $$F$$, attribute Y is extraneous in X if $$Y \subseteq X$$, and $$(X-Y)^+ \supseteq A$$.

For example:


 * If F = {A → C, AB → C}, B is extraneous in AB → C because A → C can be inferred even after deleting B. This is true because if A functionally determines C, then AB also functionally determines C.
 * If F = {A → D, D → C, AB → C}, B is extraneous in AB → C because {A → D, D → C, AB → C} logically implies A → C.

Extraneous Dependent Attributes
Given a set of functional dependencies $$F$$ and a functional dependency $$A \rightarrow B$$ in $$F$$, the attribute $$a$$ is extraneous in $$A$$ if $$a \subset A$$ and any of the functional dependencies in $$(F-(A \rightarrow B) \cup \{ A \rightarrow (B-a) \} ) $$ can be implied by $$F$$ using Armstrong's Axioms.

A dependent attribute of a functional dependency is extraneous if we can remove it without changing the closure of the set of determinant attributes in that functional dependency.

For example:


 * If F = {A → C, AB → CD}, C is extraneous in AB → CD because AB → C can be inferred even after deleting C.
 * If F = {A → BC, B → C}, C is extraneous in A → BC because A → C can be inferred even after deleting C.