首页 > 编程知识 正文

怎么把函数依赖分解范式,bc范式和第三范式的区别

时间:2023-05-04 04:42:51 阅读:15526 作者:3761

首先,如何判断一种关系是否是BCNF范式?

简而言之,对于给定关系r,每个函数依赖XY的左侧都包含关系R的码,即如果每个函数依赖的左侧是关系r的超级代码,那么该关系r是BCNF范例。

另一种判断方法是,对每个函数依赖XY的左侧求闭包,取如果对于每一个函数依赖,左侧的闭包包含关系R中的所有属性,该关系r为BCNF范式。

相反,若以上述方法判定,则当函数依赖不满足上述条件时,可以反映BCNF范例,其中该关系r不是BCNF范例。

现在,我们有关系r及其函数依赖于集合s。 那么,如何将r分解为BCNF范式的关系呢?

1 .首先,通过以上方法判断r是否为BCNF范式,否则,不需要以下步骤。

如果存在与BCNF相违背的函数依赖,则取其中之一,假设取XY,计算x的闭包x,则R1=X,r2=x((r-x ) )。

3 .分别计算R1和R2的函数依赖集合S1和S2。

4 .确定R1和R2是否为BCNF范例,否则基于相应的函数依赖集合,重复2、3、4个步骤,持续分解直到分解后的关系遵循BCNF范例。

下面用一个例子说明以上的BCNF分解算法是如何使用的。

假设存在R={A、b、c、d、e、f、G}的关系表。 其函数依赖集合为S={AB、CE、CDF、FG}。

{A,c,D}是此表的代码。

a先生b系c课程d年e单位f教师g办公室小明计算机系数据库20215矮小金鱼B123小明计算机系c语言20205矮小金鱼B123小红电子系网络基础20205cxdyzA123小花软件系数据库20205王五A112小花资源yzA123小白电子类高等数学202 02赵六C123rdhd计算机类c语言20195周七B112小强软件类高等数学202 02赵六C123小林计算机类英语20205田八D123以上步骤分解r :

1 .首先对各函数依赖的左侧求闭包,找出违反BCNF的依赖。

S={AB、CE、CDF、FG}

AB: {A}={A,B}

CE:{C}={C,E}

CDF:{CD}={C,d,e,f,G}

FG:{F}={F,g ]

可见这四种依赖违反了BCNF。 采取其中一项措施进行下一步。 这里以CDF为例。

2. R1={CD}={C,d,e,f,G},R2={C,D}{R-{CD} }={A,b,c,D}。

3 .找到R1和R2的函数依赖集合S1和S2。 这是从原始关系r的函数依赖集合s中得到的。

R1={C,d,e,f,G},S1={CE,CDF,FG}

对于R2={A,b,c,D},S2={AB}

4 .对S1和S2重复步骤1,以确定R1和R2是否遵循BCNF范式。

在这里,R2违反了BCNF范式。 因此,取其AB,求出进一步分解得到的两个关系。

R3={A}={A,B},R4={A}{R-{A} }={A,c,D}

5 .判断R3和R4是否遵守BCNF,并且对R4没有函数依赖关系也表明R4是BCNF范式。

所以R={A,b,c,d,e,f,G}分解为R1={C,d,e,f,G},R3={A,B},R4={A,c,D}。

到目前为止的分解后的关系都遵循BCNF,可以结束分解。 否则,需要继续重复上述步骤。

另外,如果不进行以上的过程,而想直接输出分解的结果,就会有非常简单的小技巧。

如果r不遵守BCNF归一化,则任意选择违反BCNF的函数依赖关系即可,被分解的关系R1包括该函数依赖的所有属性(包含在箭头的左右),R2包括该函数依赖于右侧属性的所有其他属性。 继续分解R1和R2,直到所有表均为BCNF。 此过程可能与前面的方法不同,但最终结果中的所有表都是相同的。

我希望你能把步骤写得尽可能详细,可能会很繁琐,但是如果能理解分解过程的话,就容易了。

如果有错误的话,欢迎您的指正。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。