在以下函数依赖项中是否存在传递依赖项

时间:2013-10-05 04:38:17

标签: database-design database-normalization transitive-dependency

假设我们有以下功能依赖:

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

功能依赖A->C是明确的,即你不必通过B从A到达C.

A和C之间是否存在传递依赖?如果我想用它来构建我的关系并使关系满足第三范式,我是否必须将它分解为两个关系?:

A* B
B* C

(其中*表示主键,每行是关系的标题)

或者保留它:

A* B C

仍然满足3NF?

明确地我的问题是功能依赖:A->B, B->C, C->B, and A->C A->C是一个传递依赖,为什么/为什么不呢?

2 个答案:

答案 0 :(得分:0)

A-> C不是传递依赖。 A-> B-> C是传递依赖性。

术语“及物性”仅仅意味着依赖性不止一部分。注意,关系可以满足3NF,同时仍具有传递依赖性。但是,在这种情况下,为了满足3NF,你需要将A,B,C分解成至少两个与A,B和C都是候选键的关系。

答案 1 :(得分:0)

如果这是一个完整的依赖列表,那么有一个transitive dependency A - > B - > C,因为:

  • A - >乙
  • B - > A
  • B - > ç

(如果这不是一个完整的依赖列表,那么我们不知道是否可能存在B - > A,因此我们不知道该传递依赖是否成立。)< / em>的

还存在传递依赖性A - >; C - &gt;乙

  

A-> C是传递依赖,为什么/为什么不?

传递依赖在3个属性之间,所以没有。


要规范化与3NF的关系,您需要将其拆分为2个关系......

  • A * B
  • B * C *

...或...

  • A * C
  • B * C *

...其中*表示密钥(主要或备用)。