📅  最后修改于: 2020-12-13 05:24:35             🧑  作者: Mango
要解决有关BCNF的问题,我们必须了解其对BCNF的定义:
定义:首先,它应该在3NF中,并且如果两组属性X和Y之间存在非平凡的依存关系,使得X→Y(即,Y不是X的子集),则
a)X是超级键
3NF和BCNF之间的关系是:
所有BCNF均为3NF,但反之亦然。
问题:给定一个关系R(X,Y,Z)和功能相关性集合FD = {XY→Z和Z→Y},确定给定的R是否在BCNF中?如果不转换为BCNF。
解决方案:让我们使用FD在R上构造一个箭头图,以计算候选键。
从上面R上的箭头图中,我们可以看到属性X不是由给定的FD所确定的,因此X将成为候选关键字的组成部分,即无论候选关键字是多少,候选关键字是多少将为候选键,但全部具有X强制属性。
让我们计算X的闭包
X + = X(来自我们之前研究的闭包方法)
由于X的闭包仅包含X,因此它不是候选关键字。
让我们检查Y的组合,即XY,XZ。
a)XY + = XYZ(根据我们之前研究的闭合方法)
由于XY的闭包包含R的所有属性,因此XY是候选键
b)XZ + = XZY(根据我们之前研究的封闭方法)
由于XZ的闭包包含R的所有属性,因此XZ是候选键
因此,有两个候选键XY和XZ
由于R具有3个属性:-X,Y,Z和候选键是XY和XZ,因此,主属性(候选键的一部分)是X,Y和Z,而非主键则没有。
使用3NF的定义检查R是否在3NF中:首先,它应该在2NF中,并且在两组属性X和Y之间是否存在非平凡的依存关系,使得X→Y(即Y不是子集) X)
a)X是超级键
b)或Y是主要属性。
给定FD为XY→Z,并且Z→Y和超级键/候选键为XZ和XY
a)FD: XY→Z满足3NF的定义,因为XY是超级键,而且Z是主要属性。
b)FD:即使Z不是超级密钥,而Y是主要属性, Z→Y仍满足3NF的定义。
由于R的FD,XY→Z和Z→Y都满足3NF的定义,因此R在3 NF中
使用BCNF的定义检查R是否在BCNF中:首先,它应该在3NF中,并且在两组属性X和Y之间是否存在非平凡的依存关系,使得X→Y(即Y不是子集) X)
a)X是超级键
给定FD为XY→Z和Z→Y,超级键/候选键为XZ和XY
b)FD: XY→Z满足BCNF的定义,因为XY是超级键。
c)FD: Z→Y不满足BCNF的定义,因为Z不是超级键由于R,XY→Z和Z→Y的FD都满足3NF的定义,因此R在3 NF
将表R(X,Y,Z)转换为BCNF:
由于由于FD:Z→Y,我们的表不在BCNF中,让我们分解该表
FD:Z→Y在创建问题,因此一个表R1(Z,Y)
为键XY R2(X,Y)创建表,因为XY是候选键
由于XZ是候选键,因此为键XZ R2(X,Z)创建表
注意:当我们有多个键(例如XY和XY)时,请注意,将R2和R3与R1进行比较时,要使R1和R2或R1和R3中至少有一个共同的属性,并且,则该公共属性必须是任何表中的键。
考虑到R1(Z,Y)和R2(X,Y)两个表都具有一个公共属性Y,但是Y在表R1和R2中都不是键,因此我们丢弃R2(X,Y),即丢弃候选键XY 。
考虑到R1(Z,Y)和R3(X,Z),两个表都具有一个公共属性Z,并且Z是表R1的键,因此我们包括R3(X,Z),即包括候选键XZ。
因此,BCNF中的分解表如下:
R1(Z,Y)
R2(X,Z)
问题2:给定关系R(X,Y,Z)和功能依赖关系集FD = {X→Y和Y→Z},确定给定R是否在BCNF中?如果不转换为BCNF。
解决方案:让我们使用FD在R上构造一个箭头图以计算候选密钥。
从上面R上的箭头图中,我们可以看到属性X不是由给定的FD所确定的,因此X将成为候选关键字的组成部分,即无论候选关键字是多少,候选关键字是多少将为候选键,但全部具有X强制属性。
让我们计算X的闭包
X + = XYZ(根据我们之前研究的闭合方法)
由于X的闭包包含R的所有属性,因此X是候选键
从候选密钥的定义开始(候选密钥是一个超级密钥,没有适当的子集是一个超级密钥)
使用BCNF的定义检查R是否在BCNF中:首先,它应该在3NF中,并且在两组属性X和Y之间是否存在非平凡的依存关系,使得X→Y(即Y不是子集) X)
a)X是超级键
首先,我们检查该表是否在3NF中?
使用3NF的定义检查R是否在3NF中:如果两个属性X和Y之间存在非平凡的依存关系,则X→Y(即Y不是X的子集),则
a)X是超级键
b)或Y是主要属性。
a)FD:X→Y以3NF表示(因为X是超级键)
b)FD:Y→Z不在3NF中(因为Y既不是Key也不是Z是素数属性)
因此,由于使用3NF的定义2的Y→Z,我们可以说上表R不在3NF中。
将表R(X,Y,Z)转换为3NF:
由于由于FD:Y→Z我们的表不在3NF中,让我们分解表
FD:Y→Z正在创建问题,因此有一个表R1(Y,Z)
因为X→Y,所以为键X,R2(X,Y)创建一个表
因此,分解后的表格位于3NF中:
R1(X,Y)
R2(Y,Z)
R1(X,Y)和R2(Y,Z)都在BCNF中
结论:从以上三个示例可以得出结论,按照以下步骤检查给定的关系模式R是否在3 NF中?如果不是,如何将其分解为3 NF。
步骤1:使用箭头图,然后使用R上的属性闭包,计算给定R的候选键,以便从计算出的候选键中分离出质数属性和非质数属性。
步骤2:使用BCNF定义验证每个FD(首先应在3NF中,并且在两组属性X和Y之间是否存在非平凡的依存关系,使得X→Y(即,Y不是X的子集)那么X是超级键
步骤3:设置一组不满足BCNF的FD,即所有那些在FD左侧没有属性的FD作为超级键
步骤4:通过分解R来转换BCNF中的表R,以使基于FD的每个分解都应满足BCNF的定义。
步骤5:基于FD的分解完成后,在Candidate键中创建一个单独的属性表。
步骤6:从步骤4和步骤5获得的所有分解的R均形成所需的分解,其中每个分解均在BCNF中。