📜  功能依赖的等价性

📅  最后修改于: 2021-09-08 16:03:49             🧑  作者: Mango

为了理解功能依赖集(FD集)的等价性,本文给出了关于属性闭包的基本思想

给定一个关系,该关系具有不同的 FD 集,我们必须找出一个 FD 集是另一个集的子集还是两者相等。

如何找到两个FD集之间的关系?

令 FD1 和 FD2 是关系 R 的两个 FD 集。

  1. 如果 FD1 的所有 FD 都可以从 FD2 中存在的 FD 导出,我们可以说 FD2 ⊃ FD1。
  2. 如果 FD2 的所有 FD 都可以从 FD1 中存在的 FD 导出,我们可以说 FD1 ⊃ FD2。
  3. 如果 1 和 2 都为真,则 FD1=FD2。

所有这三种情况都可以使用维恩图显示为: fd1

问:让我们举个例子来说明两个 FD 集之间的关系。关系 R(A,B,C,D) 具有两个 FD 集 FD1 = {A->B, B->C, AB->D} 和 FD2 = {A->B, B->C, A- >C,A->D}

步骤 1.检查 FD1 的所有 FD 是否都存在于 FD2 中

  • 集 FD1 中的 A->B 存在于集 FD2 中。
  • 集 FD1 中的 B->C 也存在于集 FD2 中。
  • AB->D 存在于集合 FD1 中,但不直接存在于 FD2 中,但我们将检查是否可以导出它。对于集合 FD2,(AB) + = {A,B,C,D}。这意味着 AB 可以在功能上确定 A、B、C 和 D。因此 AB->D 也将在集合 FD2 中成立。

由于集合 FD1 中的所有 FD 在集合 FD2 中也成立,所以 FD2 ⊃ FD1 为真。

步骤 2.检查 FD2 的所有 FD 是否都存在于 FD1 中

  • 集 FD2 中的 A->B 存在于集 FD1 中。
  • 集 FD2 中的 B->C 也存在于集 FD1 中。
  • A->C 存在于 FD2 中,但不直接存在于 FD1 中,但我们将检查是否可以推导出它。对于集合 FD1,(A) + = {A,B,C,D}。这意味着 A 可以在功能上确定 A、B、C 和 D。所以 A->C 也将保持在集合 FD1 中。
  • A->D 存在于 FD2 中,但不直接存在于 FD1 中,但我们将检查是否可以推导出它。对于集合 FD1,(A) + = {A,B,C,D}。这意味着 A 可以在功能上确定 A、B、C 和 D。所以 A->D 也将保持在集合 FD1 中。

由于集合 FD2 中的所有 FD 在集合 FD1 中也成立,所以 FD1 ⊃ FD2 为真。

步骤 3.由于 FD2 ⊃ FD1 和 FD1 ⊃ FD2 都为真 FD2 =FD1 为真。这两个 FD 集在语义上是等价的。


问:让我们再举一个例子来说明两个 FD 集之间的关系。关系 R2(A,B,C,D) 具有两个 FD 集 FD1 = {A->B, B->C,A->C} 和 FD2 = {A->B, B->C, A- >D}

步骤 1.检查 FD1 的所有 FD 是否都存在于 FD2 中

  • 集 FD1 中的 A->B 存在于集 FD2 中。
  • 集 FD1 中的 B->C 也存在于集 FD2 中。
  • A->C 存在于 FD1 中,但不直接存在于 FD2 中,但我们将检查是否可以推导出它。对于集合 FD2,(A) + = {A,B,C,D}。这意味着 A 可以在功能上确定 A、B、C 和 D。所以 A->C 也将保持在集合 FD2 中。

由于集合 FD1 中的所有 FD 在集合 FD2 中也成立,所以 FD2 ⊃ FD1 为真。

步骤 2.检查 FD2 的所有 FD 是否都存在于 FD1 中

  • 集 FD2 中的 A->B 存在于集 FD1 中。
  • 集 FD2 中的 B->C 也存在于集 FD1 中。
  • A->D 存在于 FD2 中,但不直接存在于 FD1 中,但我们将检查是否可以推导出它。对于集合 FD1,(A) + = {A,B,C}。这意味着 A 不能在功能上确定 D。所以 A->D 在 FD1 中将不成立。

由于集合 FD2 中的所有 FD 在集合 FD1 中都不成立,所以 FD2 ⊄ FD1。

Step 3.在这种情况下,FD2 ⊃ FD1 和 FD2 ⊄ FD1,这两个 FD 集在语义上是不等价的。