Database 我如何指出BCNF的违规行为?

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)//

本周我有一个期中考试,我很难确定是否违反了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//违规,也不明白为什么?它包含两个键


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是不容易的