Pregunta

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?

¿Fue útil?

Solución

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.

Otros consejos

If this is a complete list of dependencies, then there is a transitive dependency A -> B -> C, because:

  • A -> B
  • not B -> A
  • B -> C

(If this is not a complete list of dependencies, then we don't know whether there might be B -> A or not, and therefore we don't know whether that transitive dependency holds.)

There is also a transitive dependency A -> C -> B.

Is A->C a transitive dependency and why/why not?

A transitive dependency is between 3 attributes, so no.


To normalize the relation to the 3NF, you'll need to split it to 2 relations...

  • A* B
  • B* C*

...or...

  • A* C
  • B* C*

...where * denotes a key (primary or alternate).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top