1

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

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->CA->C传递依赖,为什么/为什么不?

4

2 回答 2

0

如果这是一个完整的依赖关系列表,则存在传递依赖关系A -> B -> C,因为:

  • A -> B
  • 不是B -> A
  • B -> C

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

还有一个传递依赖 A -> C -> B。

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

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


要使与 3NF 的关系正常化,您需要将其拆分为 2 个关系...

  • 甲*乙
  • B* C*

...或者...

  • A* C
  • B* C*

...其中 * 表示一个键(主键或备用键)。

于 2013-10-06T20:49:38.610 回答
0

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

术语“传递”只是意味着依赖项具有多个部分。请注意,关系可能满足 3NF,同时仍具有传递依赖关系。然而,在这种情况下,要满足 3NF,您需要将 A、B、C 分解为至少两个关系,其中 A、B 和 C 都是候选键。

于 2013-10-05T16:20:21.547 回答