- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我查看了 Decomposing a relation into BCNF答案并在我的作业中尝试过,但我没有得到正确的答案,所以我在 BCNF 分解方面寻求帮助
考虑 R=(ABCDEG)
& F={BG->CD, G->A, CD->AE, C->AG, A->D}
.
我开始挑A->D
.
现在我得到了S=(AD), R'=(ABCEG).
我选G->A
.
现在我得到了S=(AD,AG) R'=(BCEG)
.
我选C->G
.现在我想我需要得到 S=(AD,AG,CG)
和 R'=(BCE)
, 但是最后的答案是(AD,AG,CGE,BC)
。什么地方出了错?或者,更好的算法?
最佳答案
转换关系 R
和一组功能依赖项( FD's
)到 3NF
你可以使用 Bernstein's Synthesis。应用伯恩斯坦的综合 -
FD's
集合是一个最小覆盖FD
并使其成为自己的子架构。例如您的情况:
R = {A,B,C,D,E,G}
FD = {BG->CD,G->A,CD->AE,C->AG,A->D}
首先我们检查FD's
是否是最小覆盖(单例右侧,没有多余的左侧属性,没有冗余 FD)
D
来自 CD->A
的 LHS和 CD->E
自 D
在这里是一个无关的属性(因为我们可以从 D
得到 C
因为 C->A 和 A->D)。所以我们现在有{BG->C, BG->D, G->A, C->A, C->E, C->G, A->D}其次我们制作每个 FD
它自己的子模式。所以现在我们有了 -(每个关系的键都以粗体显示)
R1={B,G,C}
R2={G,A}
R3={C,E
R4={C,G
R5={A,D
第三我们看看是否可以组合任何子模式。我们看到 R3 和 R4 可以组合,因为它们具有相同的 key 。所以现在我们有 -
S1 = {B,G,C}
S2 = {A,G}
S3 = {C,E,G}
S4 = {A,D}
这属于3NF。现在检查 BCNF 我们检查这些关系中的任何一个 (S1,S2,S3, S4) 违反了 BCNF 的条件(即对于 每个 函数依赖 X->Y
左侧 ( X
) 必须是一个 super 键)。在这种情况下,这些都不违反 BCNF,因此它也被分解为 BCNF。
注意 我上面的最终答案是(AD,AG,CGE,BCG)
.您期望的解决方案是 (AD,AG,CGE,BC)
但那是错误的。这里的最后一个关系 (S1) 也应该有 G
属性如上所示。
关于database - BCNF分解算法讲解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34294136/
1、流程控制语句主要有if、ii...else、elseif(有时也可以写成else if)、switch四种。 PHP中语句格式为: if(条件满足) {执行语句} if(条件满足) {执行
目录 DFS初步概念 DFS例题-迷宫游戏 题目描述 输入输出格式 输入输出样例
This question两年前被问到,但它提到的资源要么不是很有帮助(恕我直言),要么链接不再有效。 必须有一些很好的教程才能理解 Phaser .我已经阅读了 javadoc,但我的眼睛呆滞了,因
This question两年前被问到,但它提到的资源要么不是很有帮助(恕我直言),要么链接不再有效。 必须有一些很好的教程才能理解 Phaser .我已经阅读了 javadoc,但我的眼睛呆滞了,因
参考资料: [2411.14499] Understanding World or Predicting Future? A Comprehensive Survey of World Mod
这个正则出自这个网站 http://www.regexlab.com/zh/regref.htm 正向预搜索:"(?=xxxxx)","(?!xxxxx)"
chr(9)、chr(10)、chr(13)、chr(32)、chr(34) 所有关于 ASCII码的表格:[url]http://www.asciitable.com/[/url] chr(13)
我是一名优秀的程序员,十分优秀!