关系数据库 - 在寻找非关键值之间的功能依赖时,我应该寻找多重依赖的原因吗?

Relational DB - When looking to functional dependencies among non-key values, should I look to multi-dependence causers?

例如:假设我有这个数据库

A      //primary key
B
C
D

所有字段都取决于键的功能。

没有非键字段在功能上依赖于另一个非键字段。

但是:D depends functionally of B and C.我在尝试实现第三范式时是否应该考虑这一点(对多个字段的依赖)?

您的问题归结为:R1 和 R2 相同吗?

  • R1(ABCD),A->BCD
  • R2(A BCD), A->BCD, BC->D

显然它们是不同的。 R1 至少是现在的 BCNF; R2有传递依赖,BC->D,所以不高于2NF.

我们用大写字母写属性,因为大写字母在set theory中代表。关系模型部分基于集合论。因此,在现实世界的建模工作中,A 可能表示一组三列。

在您的示例中,一个函数依赖项的左侧和两侧由单个字母 A 表示,而另一个函数依赖项的左侧表示两个字母 BC 并不重要。这两个左侧可能代表关系 table 中的两个、三个或更多列。通过 BCNF 进行的规范化总是考虑到您所知道的每个 函数依赖性,无论表达它需要多少个字母。

可以 甚至像这样重写 R2,在完成 E = BC 之后。根本不改变传递依赖。

  • R2(AED),A->ED,E->D