Database 我如何指出BCNF的违规行为?
本周我有一个期中考试,我很难确定是否违反了BCNF。我知道如何分解关系,找出哪些是关键,哪些是超关键。我还可以写出隐含的FD。我正在看以下视频: 总而言之,解释的女士开始将BCNF算法应用于以下关系(她使用学生示例,但我已将其转换为字母以简化): 带FDs的R(A,B,C,D,E,F,G,H):A->BCG,G->H,D->EF 我知道密钥是AD,因为它的闭包是AD+=ABCDEFGH。 她说,所有呈现的FD都是违规行为,并开始应用算法: BCNF尝试#1: R1=D->EF(D+=DEF)//没有冲突,但为什么?这不就是一种侵犯吗 R2=ABCDEFG-(DEF-D)=ABCDGH//违规,也不明白为什么?它包含两个键Database 我如何指出BCNF的违规行为?,database,schema,computer-science,functional-dependencies,bcnf,Database,Schema,Computer Science,Functional Dependencies,Bcnf,本周我有一个期中考试,我很难确定是否违反了BCNF。我知道如何分解关系,找出哪些是关键,哪些是超关键。我还可以写出隐含的FD。我正在看以下视频: 总而言之,解释的女士开始将BCNF算法应用于以下关系(她使用学生示例,但我已将其转换为字母以简化): 带FDs的R(A,B,C,D,E,F,G,H):A->BCG,G->H,D->EF 我知道密钥是AD,因为它的闭包是AD+=ABCDEFGH。 她说,所有呈现的FD都是违规行为,并开始应用算法: BCNF尝试#1: R1=D->EF(D+=DEF)//
R2上的BCNF尝试#2: R3=G->H(G+=GH)//没有冲突,因为我相信只有两个属性GH R4=ABCDG//违规,但我不知道为什么
R4上的BCNF尝试#3: R5=A->BCG//无违规(?) R6=AD//无违规(?)
最终关系:R1、R2、R5、R6。在
R
中的冲突是部分的和可传递的函数依赖关系。当这些FD被提取为单独的关系时,它们不再是部分的或可传递的。这就是我们正常化的原因,所以当他们被孤立时,他们不再是违法行为也就不足为奇了
R1/R2:在R
中,EF
依赖于D
,即候选键AD
的子集,因此它是部分依赖项。当提取到只有D
作为候选键的R1
时,相关性不再是部分的。R
的其余部分变为R2
,其中仍然包含部分FD(a->BCG
)和传递性FD(a->G->H
)
R3/R4:在R2
中,A->G->H
因此G->H
是一个可传递的FD。当提取到R3
时,它不再是可传递的。R2
的其余部分变为R4
,但仍包含部分FD(a->BCG
)
R5/R6:在R4
中,BCG
取决于A
,A是候选密钥AD
的子集。当提取到只有A
作为候选键的R5
时,依赖关系不再是部分的。R4
的其余部分变为R6
,它没有任何非平凡的FD
您的最终答案应该是R1、R3、R5和R6
请注意,并非所有BCNF冲突都可以归类为部分或传递性功能依赖。中的冲突属于部分和传递性功能依赖。当这些FD被提取为单独的关系时,它们不再是部分的或可传递的。这就是我们正常化的原因,所以当他们被孤立时,他们不再是违法行为也就不足为奇了 R1/R2:在
R
中,EF
依赖于D
,即候选键AD
的子集,因此它是部分依赖项。当提取到只有D
作为候选键的R1
时,相关性不再是部分的。R
的其余部分变为R2
,其中仍然包含部分FD(a->BCG
)和传递性FD(a->G->H
)
R3/R4:在R2
中,A->G->H
因此G->H
是一个可传递的FD。当提取到R3
时,它不再是可传递的。R2
的其余部分变为R4
,但仍包含部分FD(a->BCG
)
R5/R6:在R4
中,BCG
取决于A
,A是候选密钥AD
的子集。当提取到只有A
作为候选键的R5
时,依赖关系不再是部分的。R4
的其余部分变为R6
,它没有任何非平凡的FD
您的最终答案应该是R1、R3、R5和R6
请注意,并非所有BCNF冲突都可以归类为部分或传递性函数依赖。感谢您的解释和修复我的最终答案。@philipxy不难证明部分和传递性FD违反BCNF。我的观点不是要对BCNF违规行为进行分类,而是要对OP问题中的违规行为给出一个有效的(和熟悉的)解释,这恰好可以用这些术语来描述。为了完整性,我添加了一个PS.@reaanb,很容易显示BCNF上非素数属性的部分依赖关系,因为它们违反了2NF——但是,它们是FD而不是SKs。如果不引用FDs not out SKs,则很难准确显示哪些部分依赖项、传递依赖项和其他依赖项违反BCNF。既然后者很重要,为什么还要麻烦呢?来自3NF的部分的和可传递的,熟悉的概念在这里是没有用的——除非你使用的定义是3NF加上集合中的每一个元素,确定集合和行列式集合之间的差异是一个基本属性——同样,不是部分的或可传递的。谢谢你的解释和修正我的最终答案。@philipxy不难证明部分的和可传递的FD违反了BCNF。我的观点不是要对BCNF违规行为进行分类,而是要对OP问题中的违规行为给出一个有效的(和熟悉的)解释,这恰好可以用这些术语来描述。为了完整性,我添加了一个PS.@reaanb,很容易显示BCNF上非素数属性的部分依赖关系,因为它们违反了2NF——但是,它们是FD而不是SKs。要准确地显示哪一个是偏的、传递的和o是不容易的