📜  BOYCE CODD普通格式的问题

📅  最后修改于: 2020-12-13 05:24:35             🧑  作者: Mango

BOYCE CODD正常形式的问题

要解决有关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中。