Search code examples
database-designdatabase-normalizationtransitive-dependency

Is there a transitive dependency in the following functional dependencies


Let's say we have the following functional dependencies:

A->B, B->C, C->B, and A->C

Where the functional dependency A->C is explicit, i.e. you don't have to go through B to get to C from A.

Is there a transitive dependency between A and C? If I was wanting to use this to build my relation and have the relation satisfy third normal form, would I have to break it up into two relations?:

A* B
B* C

(where * means primary key, and each line is the header of a relation)

Or would keeping it as:

A* B C

still satisfy 3NF?

Explicitly my question is given the functional dependencies: A->B, B->C, C->B, and A->C Is A->C a transitive dependency and why/why not?


Solution

  • A->C is not a transitive dependency. A->B->C is a transitive dependency.

    The term "transitive" just means the dependency has more than one part to it. Note that a relation may satisfy 3NF while still having transitive dependencies. In this case however, to satisfy 3NF you need to decompose A,B,C into at least two relations with A,B and C all being candidate keys.