5

如您所知,有 3 个Armstrong 公理可用于推断关系数据库的所有功能依赖关系。(X、Y 和 Z 是一组属性)

  1. 自反性如果 X ⊆ Y,则 Y → X
  2. 增强如果 X → Y,那么对于任何 Z,XZ → YZ
  3. 传递性如果 X → Y 和 Y → Z,则 X → Z

例如,如果我们有这样的模式,我理解增强和传递性:

SOME_SCHEMA(a, b, c, d)

具有这样的功能依赖:

  1. a → b
  2. b → c

通过使用增强,我们可以得到ac → bc或通过使用传递性,我们可以得到a → c等等,但是我不确定如何使用自反性公理推断更多的函数依赖关系?某个属性是某个其他属性的子集究竟意味着什么?

你能给我看一个使用我的模式或创建你自己的模式的例子吗?

4

1 回答 1

4

传递性规则也可以这样表述:

A1, A2, …, An → Ai

其中 i 是 1 到 n 之间的任意数。我认为这个规则的定义更清晰一些。A1 是 A1 到 An 的子集,因此您可以推断出上述依赖关系。

这些类型的依赖被称为琐碎依赖。最简单的形式是:

A → A

如您所见,A 是 A 的子集,因此通过自反性的定义,我们可以推断出上述依赖关系。

这确实不是一个很有用的公理,前两个公理本身都不是很有用,但是为了形式而存在,所以我们可以得到最后一个公理,它非常有用。

要使用您的示例,我们可以说以下内容。鉴于我们有表格:

SOME_SCHEMA(a, b, c, d)

我们可以推断出这样的依赖关系:

a, b, c, d → a
a, b, c, d → a, c

以及更多相同性质的依赖项。

顺便说一句,这里有一些很好的幻灯片,它们很好地解释了函数依赖关系。还有一些关于阿姆斯特朗规则的幻灯片。在学习这些东西时,我发现这些很有帮助:Functional Dependency Slides

于 2013-01-27T05:40:41.370 回答