1

假设我有以下关系

C -> B
CB -> AC
CAE -> FB
D -> E
CA -> B

我书中给出的规范封面是C -> AB, CE -> F, D -> E

但是Canonical cover 也可以是C - AB, D - EF?一个关系我们可以有两个不同的canonical cover 吗?

4

2 回答 2

3

但Canonical封面也可以C - ABD - EF

,它不能成为您的一组功能依赖项 (FD) 的规范封面。F 的规范覆盖是等效于 F的“最小”函数依赖集,没有冗余依赖或依赖的冗余部分。

您建议的规范封面不等同于F. 例如CAE->FB,您建议的规范覆盖没有完全覆盖功能依赖,因此它不是规范覆盖。

另一方面,您书中给出的C -> AB, CE -> F, D -> E封面是规范封面,并且是这套 FD唯一可能的规范封面。

我们可以为一种关系提供两种不同的规范封面吗?

的,我们可以。为了找到规范封面,我们这样做 -

  • 首先确保单例右侧(RHS)
  • 其次删除任何无关的左侧(LHS)属性
  • 第三删除任何多余的功能依赖

由于上述第三步,我们可以为一种关系提供不同的规范覆盖。我将用一个例子来解释这一点。

给定FD为:

X→YZ
Y→XZ
Z→XY

首先确保单例 RHS。所以我们有:

  1. X→Y
  2. X→Z
  3. Y→X
  4. Y→Z
  5. Z→X
  6. Z→Y

第二没有多余的LHS。已经很满意了。

第三删除任何多余的FD。现在我们可以删除 (2)、(3) 和 (6) 作为冗余依赖项,并将最小覆盖集设置为:

1:

X→Y,
Y→Z,
Z→X

或者我们可以删除 (1)、(4) 和 (5) 作为冗余依赖项,并将最小覆盖集设置为:

2:

Z→Y,
Y→X,
X→Z

因此,在这种情况下,对于同一关系,我们有两个规范覆盖。

于 2015-12-18T12:26:01.780 回答
1

是的,一组功能依赖(不是关系)可以有多个规范覆盖。Date 在An Introduction to Database Systems,第 7 版,p346f中对练习 10.12 的答案进行了逐步推导。

Date 不使用术语canonical cover。他或多或少地使用了不可约的覆盖。

于 2015-12-17T11:43:40.733 回答