database - 对于任何关系,规范封面总是唯一的吗?

标签 database database-normalization functional-dependencies bcnf

假设我有如下关系

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

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

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

最佳答案

But Canonical cover can also be C - AB, D - EF?

,它不能是您的功能依赖项 (FD) 集合的规范覆盖。 F 的规范覆盖是泛函的“最小”集 依赖项等同于 F,没有冗余依赖项或依赖项的冗余部分。

您建议的规范封面不等同于 F。例如,函数依赖性 CAE->FB 未完全包含在您建议的规范覆盖中,因此它不是规范覆盖。

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

Can we have two different canonical cover for one relationship?

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

  • 首先确保单例右侧(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

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

关于database - 对于任何关系,规范封面总是唯一的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34332781/

相关文章:

java - 数据库注释 - 重复注释

Android - 复杂的数据库和内容提供者

database-design - 外键取决于列内容——如何保证完整性?

PHP在mysql数据库中选择未知的和运算符

database - 3NF 的综合算法

unit-testing - tdd - 为第 3 方代码创建测试

sql - 在 Access 中更新部分记录

mysql - 搜索房间可用性

php - MySql 获取列中每个 id 的列表,其中搜索 id 是一个数组

list - 序言联合失败