Canonical cover

From HandWiki

A canonical cover Fc for F (a set of functional dependencies on a relation scheme) is a set of dependencies such that F logically implies all dependencies in Fc, and Fc logically implies all dependencies in F. The set Fc has two important properties:

  1. No functional dependency in Fc contains an extraneous attribute.
  2. Each left side of a functional dependency in Fc is unique. That is, there are no two dependencies ab and cd in Fc 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 Fc.

Algorithm for computing a canonical cover

  1. Fc=F
  2. Repeat:
    1. Use the union rule to replace any dependencies in Fc of the form ab and ad with abd ..
    2. Find a functional dependency in Fc with an extraneous attribute and delete it from Fc
  3. ... until Fc does not change

[1]

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.[2]

Extraneous Determinant Attributes

Given a set of functional dependencies F and a functional dependency AB in F, the attribute a is extraneous in A if aA and any of the functional dependencies in (F(AB)(Aa)B) can be implied by F using Armstrong's Axioms.[2]

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 YX, and (XY)+A.[3]

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 AB in F, the attribute a is extraneous in A if aA and any of the functional dependencies in (F(AB){A(Ba)}) can be implied by F using Armstrong's Axioms.[3]

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.[2]

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.

References