📅  最后修改于: 2020-12-13 05:26:33             🧑  作者: Mango
要解决有关3 NF的问题,我们必须了解这两个定义:
定义1:关系模式R据说在3NF中,首先,它应该在2NF中,并且任何非素数属性都不应可传递地依赖于表的键。
如果存在X→Y和Y→Z,则X→Z也存在,这是传递依存关系,因此不成立。
定义2:首先,它应该在2NF中,并且如果两组属性X和Y之间存在非平凡的依存关系,使得X→Y(即,Y不是X的子集),则
问题1:给定关系R(X,Y,Z)和功能相关性集合FD = {X→Y和Y→Z},确定给定R是否在3NF中?如果不转换为3 NF。
解决方案:让我们使用FD在R上构造一个箭头图以计算候选密钥。
从R上方的箭头图中,我们可以看到属性X不是由任何给定的FD确定的,因此X将成为候选关键字的组成部分,即,无论候选关键字是什么,以及候选关键字将是多少是候选键,但都将具有X强制属性。
让我们计算X的闭包
X + = XYZ(根据我们之前研究的闭合方法)
由于X的闭包包含R的所有属性,因此X是候选键
从候选密钥的定义开始(候选密钥是一个超级密钥,没有适当的子集是一个超级密钥)
由于所有密钥都将X作为组成部分,并且我们已经证明X是候选密钥,因此,X的任何超集都是超级密钥,而不是候选密钥。
因此将只有一个候选键X
3NF的定义:关系模式R据说在3NF中,首先,它应该在2NF中,并且任何非素数属性都不应可传递地依赖于表的键。
如果存在X→Y和Y→Z,则X→Z也存在,这是传递依存关系,因此不成立。
由于R具有3个属性:-X,Y,Z,并且候选键为X,因此,素数属性(候选键的一部分)为X,而非素数属性为Y和Z
给定FD为X→Y和Y→Z
因此,我们可以写X→Z(这是一个传递依赖)
在上面的FD X→Z中,非素属性(Z)取决于表(X)的键,因此,根据3NF的定义,它不在3 NF中,因为不应该传递任何非素属性取决于表的键。
现在检查上表中的2 NF。
因此,上表R(X,Y,Z)在2NF中,但不在3NF中。
我们还可以从定义2中证明相同:首先,它应该在2NF中,并且如果两组属性X和Y之间存在非平凡的依存关系,使得X→Y(即,Y不是X的子集)然后
由于我们刚刚证明了上表R在2 NF中。让我们使用定义2来检查3NF。
因此,由于使用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)
问题2:给定关系R(X,Y,Z,W,P)和功能相关性集合FD = {X→Y,Y→P和Z→W},确定给定的R是否在3NF中?如果不转换为3 NF。
解决方案:让我们使用FD在R上构造一个箭头图以计算候选密钥。
从R上方的箭头图中,我们可以看到,属性XZ并非由给定的FD所确定,因此XZ将成为候选关键字的组成部分,即无论候选关键字是多少,候选关键字将是多少是候选键,但都将具有XZ强制属性。
让我们计算XZ的关闭时间
XZ + = XZYPW(来自我们之前研究的闭包方法)
由于XZ的闭包包含R的所有属性,因此XZ是候选键
从候选密钥的定义开始(候选密钥是一个超级密钥,没有适当的子集是一个超级密钥)。
由于所有密钥都将XZ作为组成部分,并且我们已经证明XZ是候选密钥,因此,XZ的任何超集将是超级密钥,而不是候选密钥。
因此,只有一个候选键XZ
3NF的定义:首先,它应该在2NF中,并且如果两组属性X和Y之间存在非平凡的依存关系,使得X→Y(即Y不是X的子集),则
由于R具有5个属性:-X,Y,Z,W,P和候选键为XZ,因此,主要属性(候选键的一部分)为X和Z,而非主要属性为Y,W和P
给定FD为X→Y,Y→P和Z→W,超级键/候选键为XZ
将表R(X,Y,Z,W,P)转换为3NF:
由于所有FD = {X→Y,Y→P和Z→W}都不在3NF中,因此让我们将R转换为3NF
R1(X,Y) {使用FD X→Y}
R2(Y,P) {使用FD Y→P}
R3(Z,W) {使用FD Z→W}
并为候选键XZ创建一个表
R4(X,Z) {使用候选键XZ}
所有分解表R1,R2,R3和R4都位于2NF(因为没有部分依赖性)中,也位于3NF中。
因此,分解后的表为:
R1(X,Y),R2(Y,P),R3(Z,W)和R4(X,Z)
问题3:给定关系R(P,Q,R,S,T,U,V,W,X,Y)和函数相关性集FD = {PQ→R,P→ST,Q→U,U→VW ,然后S→XY},确定给定的R是否在3NF中?如果不转换为3 NF。
解决方案:让我们使用FD在R上构造一个箭头图以计算候选密钥。
从R上方的箭头图中,我们可以看到属性PQ不受任何给定FD的确定,因此PQ将成为候选关键字的组成部分,即无论候选关键字是多少,候选关键字将是多少是候选键,但都将具有PQ强制属性。
让我们计算PQ的结束时间
PQ + = PQRSTUXYVW(根据我们之前研究的闭合方法)
由于XZ的闭包包含R的所有属性,因此PQ是候选键
从候选密钥的定义开始(候选密钥是一个超级密钥,没有适当的子集是一个超级密钥)
由于所有密钥都将PQ作为组成部分,并且我们已经证明XZ是候选密钥,因此,PQ的任何超集都将是超级密钥,而不是候选密钥。
因此,只有一个候选密钥PQ
3NF的定义:首先,它应该在2NF中,并且如果两组属性X和Y之间存在非平凡的依存关系,使得X→Y(即,Y不是X的子集),则
c)X都是超级键
d)或Y是主要属性。
由于R具有10个属性:-P,Q,R,S,T,U,V,W,X,Y,V,W,并且候选键是PQ,因此,主要属性(候选键的一部分)是P和Q而非素数属性是RSTUVWXYVW
给定FD为{PQ→R,P→ST,Q→U,U→VW和S→XY},而超级键/候选键为PQ
将表R(X,Y,Z,W,P)转换为3NF:
由于所有FD = {P→ST,Q→U,U→VW和S→XY}都不在3NF中,因此让我们将R转换为3NF
R1(P,S,T) {使用FD P→ST}
R2(Q,U) {使用FD Q→U}
R3(U,V,W) {使用FD U→VW}
R4(S,X,Y) {使用FD S→XY}
R5(P,Q,R) {使用FD PQ→R和候选键PQ}
所有分解的表R1,R2,R3,R4和R5都在2NF(因为没有部分依赖性)和3NF中。
因此,分解后的表为:
R1(P,S,T),R2(Q,U),R3(U,V,W),R4(S,X,Y)和R5(P,Q,R)
结论:从以上三个示例中,我们可以得出结论,按照以下步骤检查给定的关系模式R是否在3 NF中?如果不是,如何将其分解为3 NF。
步骤1:使用箭头图,然后使用R上的属性闭包,计算给定R的候选键,以便从计算出的候选键中分离出质数属性和非质数属性。
步骤2:使用3NF的定义验证每个FD(首先应在2NF中,并且在两组属性X和Y之间是否存在非平凡的依存关系,使得X→Y(即,Y不是X的子集)那么X是超级键或Y是素数属性)。
步骤3:设置一组不满足3NF的FD,即所有那些在FD左侧没有属性作为超级键或在FD右侧没有属性作为主要属性的FD。
步骤4:通过分解R来转换3NF中的表R,以使基于FD的每个分解都应满足3NF的定义。
步骤5:基于FD的分解完成后,在Candidate键中创建一个单独的属性表。
步骤6:从步骤4和步骤5获得的所有分解的R形成所需的分解,其中每个分解为3NF。