【问题标题】:Decompose relation into BCNF form将关系分解为 BCNF 形式
【发布时间】:2019-08-14 00:36:09
【问题描述】:

假设我们有

R(ABCDE) 和函数依赖:{AB -> C, B -> C, C -> D},将其转换为 BCNF。

我看到R 的候选键是ABE,所以这显然不在BCNF 中。

为了分解,我创建了这些关系:

R1(ABC)
R2(BC)
R3(CD)
R4(ABE)

这行得通吗?

【问题讨论】:

  • Re“这是对的”:根据您的参考/教科书显示您的工作步骤,并说明理由-您可能会发现使您的问题变得不必要的错误,我们想检查您的工作但不重做它&当算法允许时我们需要你的选择&否则我们无法告诉你你在哪里做对或错&我们不想重写你的教科书。请参阅How to Ask,点击谷歌搜索“stackexchange 作业”和投票箭头鼠标悬停文本。所以你告诉我们为什么它有效。

标签: relational-database database-normalization bcnf


【解决方案1】:

如果给出的函数依赖是对 R 的函数依赖的一个覆盖,则应用所谓的“分析”算法会产生以下分解:

R2 (ABE)
R3 (CD)
R4 (BC)

我们首先考虑对依赖项的最小覆盖。这是:

B → C
C → D

(因为在 AB → C 中我们可以注意到 A 是无关紧要的,因为我们已经有了 B → C)。

因此,由于 B → C 违反了 BCNF,我们将 R 分解为两个关系:

R1 (BCD), with candidate key B
R2 (ABE), with candidate key ABE

在第二个关系中没有非平凡的函数依赖,所以我们保持原样,而在 R1 中唯一的候选键是 B,所以 C → D 违反了 BCNF,我们将其分解为:

R3 (CD)
R4 (BC)

所以最终的分解是 R2、R3 和 R4。请注意,此分解保留了函数依赖关系(此算法并非总是可以做到这一点)。

【讨论】:

  • > 请注意,这种分解保留了函数依赖关系(这种算法并不总是可以做到这一点)。非常感谢!你能告诉我这是怎么回事吗?函数依赖AB -> C 消失了?
  • @seq,如果加入分解后的关系,AB→C可以由B→C推导出来。一般来说很多依赖可以从其他的推导出来。出于这个原因,在应用归一化算法之前找到一个最小(或规范)覆盖是很方便的。
猜你喜欢
  • 2018-03-20
  • 1970-01-01
  • 1970-01-01
  • 2014-11-24
  • 2013-03-08
  • 2012-12-14
  • 1970-01-01
相关资源
最近更新 更多