📜  第三范式上的问题

📅  最后修改于: 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的子集),则

  • X要么是超级键
  • 或Y是主要属性。

问题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。

  • FD:X→Y在2NF中(因为Key未断开且其功能完全依赖)
  • FD:Y→Z也在2NF中(因为它不违反2NF的定义)

因此,上表R(X,Y,Z)在2NF中,但不在3NF中。

我们还可以从定义2中证明相同:首先,它应该在2NF中,并且如果两组属性X和Y之间存在非平凡的依存关系,使得X→Y(即,Y不是X的子集)然后

  • X要么是超级键
  • 或Y是主要属性。

由于我们刚刚证明了上表R在2 NF中。让我们使用定义2来检查3NF。

  • FD:X→Y以3NF表示(因为X是超级键)
  • 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)

问题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的子集),则

  • X要么是超级键
  • 或Y是主要属性。

由于R具有5个属性:-X,Y,Z,W,P和候选键为XZ,因此,主要属性(候选键的一部分)为X和Z,而非主要属性为Y,W和P

给定FD为X→Y,Y→P和Z→W,超级键/候选键为XZ

  • FD: X→Y不满足3NF的定义,即X既不是超级键也不是Y是素数属性。
  • FD: Y→P不满足3NF的定义,即Y既不是超级键也不是P是素数属性。
  • FD: Z→W满足3NF的定义,即Z既不是超级键也不是W是素数属性。

将表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

  • FD: PQ→R满足3NF的定义,称为PQ超级密钥
  • FD: P→ST不满足3NF的定义,即P既不是超级密钥也不是ST是主要属性
  • FD: Q→U不满足3NF的定义,即Q既不是超级密钥也不是U是主要属性
  • FD: U→VW不满足3NF的定义,即U既不是超级密钥也不是VW是主要属性
  • FD: S→XY不满足3NF的定义,即S既不是超级键也不是XY是素数属性

将表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。