📜  确定标准格式的问题

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

确定正常形式的问题

要解决此问题以识别正常形式,我们必须了解其对BCNF,3 NF和2NF的定义:

2NF的定义:任何非素数属性都不应部分依赖于候选键。也就是说,X→Y不应有部分依赖性。

3NF的定义:首先,它应该在2NF中,并且如果两组属性X和Y之间存在非平凡的依存关系,使得X→Y(即Y不是X的子集),则

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

BCNF的定义:首先,它应在3NF中,并且如果两组属性X和Y之间存在非平凡的依存关系,使得X→Y(即Y不是X的子集),则

  • X是超级键

注意:如果表位于BCNF中,则该表位于3NF,2NF和1NF中,类似地,如果表位于3NF中,则其位于2NF和1NF中。因此,我们可以说,如果表的格式为高标准格式,那么默认情况下,表的格式为低标准格式。

问题1:给定关系R(P,Q,R,S,T,U,V,W,X)和功能相关性集合FD = {PQ→R,QS→TU,PS→VW和P→X} ,确定给定的R是否为正常形式?

解决方案:让我们使用FD在R上构造一个箭头图以计算候选密钥。

从上面R上的箭头图中,我们可以看到属性PQS不受任何给定FD的确定,因此PQS将成为候选关键字的组成部分,即无论候选关键字是多少,候选关键字是多少将是候选密钥,但是全部将具有PQS强制属性。

让我们计算一下PQS的关闭时间

PQS + = PQRSTUXVW(来自我们之前研究的闭包方法)

由于PQS的闭包包含R的所有属性,因此PQS是候选关键字

从候选密钥的定义开始(候选密钥是一个超级密钥,没有适当的子集是一个超级密钥)

由于所有密钥都将PQS作为必不可少的部分,并且我们已经证明PQS是候选密钥,因此,PQS的任何超集都将是超级密钥,而不是候选密钥。

因此,将只有一个候选密钥PQS

由于R具有9个属性:-P,Q,R,S,T,U,V,W,X,并且候选键是PQS,因此,主属性(候选键的一部分)是PQ和S,而非主键属性是RTUVWX

给定FD为{PQ→R,QS→TU,PS→VW和P→X},而超级密钥/候选密钥为PQS

注意:为解决此类问题,我们应用了逆向工程,即首先检查BCNF,如果不是,则检查3NF,如果不是,则检查2NF,依此类推。

  • FD: PQ→R不满足BCNF的定义,因为PQ不是超级键,因此该表不在BCNF中(因为如果一个依赖项失败,则全部失败),现在我们为3NF检查相同的FD。
  • FD: PQ→R甚至不满足3NF的定义,因为PQ不是Super Key或R不是主要属性,因此表也不在3NF中(因为如果一个依赖项失败,则全部失败),现在我们检查相同的FD对于2NF
  • FD: PQ→R甚至不满足2NF的定义,因为PQ不是超级键,而R不是依赖于键的一部分的部分属性(部分依赖),因此表也不在2NF中(因为如果一个依赖失败,全部失败)。

因此,根据以上三个语句,我们可以说表R(P,Q,R,S,T,U,V,W,X)仅在1NF中。

问题2:给定一个关系R(P,Q,R,S,T,U,V,W)和功能相关性集合FD = {PQ→R,P→ST,Q→U和U→VW},确定给定R是哪种范式?

解决方案:让我们使用FD在R上构造一个箭头图以计算候选密钥。

从上面R上的箭头图中,我们可以看到属性PQ不是由给定FD所确定的,因此PQ将成为候选关键字的组成部分,即无论候选关键字是多少,候选关键字是多少将是候选密钥,但是全部将具有PQ强制属性。

让我们计算PQ的结束时间

PQ + = PQRSTUVW(根据我们之前研究的封闭方法)

由于PQ的闭包包含R的所有属性,因此PQ是候选键

从候选密钥的定义开始(候选密钥是一个超级密钥,没有适当的子集是一个超级密钥)

由于所有密钥都将PQ作为组成部分,并且我们已经证明PQ是候选密钥,因此,PQ的任何超集都将是超级密钥,而不是候选密钥。

因此,只有一个候选密钥PQ

由于R具有8个属性:-P,Q,R,S,T,U,V,W,候选键为PQ。因此,素数属性(候选关键字的一部分)是P和Q,而非素数属性是RSTUVW

给定FD为{PQ→R,P→ST,Q→U和U→VW},而超级键/候选键为PQ

注意:为解决此类问题,我们应用了逆向工程,即首先检查BCNF,如果不是,则检查3NF,如果不是,则检查2NF,依此类推。

  • FD: PQ→R满足BCNF的定义,因为PQ是超级密钥,因此无需检查它的其他范式,因为它满足最高的形式。现在,我们以反向工程的方式检查另一个依赖项。
  • FD: P→ST不满足BCNF的定义,因为P不是超级键,因此表不在BCNF中(因为如果一个依赖项失败,则全部失败),现在我们为3NF检查相同的FD。
  • FD: P→ST甚至不满足3NF的定义,因为P不是Super Key或ST不是素数属性,因此表也不在3NF中(因为如果一个依赖项失败,则全部失败),现在我们检查相同的FD对于2NF。
  • FD: P→ST甚至不满足2NF的定义,因为P不是超级密钥,而ST不是依赖于密钥的一部分的主要属性(部分依赖),因此表也不在2NF中(因为如果一个依赖失败,全部失败)。

因此,根据以上三个语句b,c和d,我们可以说表R(P,Q,R,S,T,U,V,W,)仅在1NF中。

问题3:给定关系R(P,Q,R,S,T,U)和功能相关性集合FD = {PQ→R,SR→PT,T→U},确定给定的R是哪种范式?

解决方案:让我们使用FD在R上构造箭头图以计算候选键。

从上面R上的箭头图中,我们可以看到,属性QS不是由给定的FD所确定的,因此QS将成为候选关键字的组成部分,即无论候选关键字是多少,候选关键字是多少将是候选密钥,但都将具有QS强制属性。

让我们计算QS的结束时间

QS + = QS(来自我们之前研究的封闭方法)

由于闭包QS并不包含R的所有属性,因此QS不是候选键。

通过将QS与另一个属性组合在一起,我们发现PQS和RQS决定了R的所有属性,因此PQS和RQS是R的候选关键字。

由于R具有6个属性:-P,Q,R,S,T,U和候选键是PQS和RQS,因此,主要属性(候选键的一部分)是PQR和S,而非主要属性是TU

给定FD为{PQ→R,SR→PT,T→U},而超级键/候选键为PQS和RQS

注意:为解决此类问题,我们应用了逆向工程,即首先检查BCNF,如果不是,则检查3NF,如果不是,则检查2NF,依此类推。

  • FD: PQ→R不满足BCNF的定义,因为PQ不是超级键,因此表不在BCNF中(因为如果一个依赖项失败,则全部失败),现在我们为3NF检查相同的FD
  • FD: PQ→R满足3NF的定义,即使PQ不是超级键而是R属于属性,因此该表位于3NF,现在我们使用逆向工程过程检查其他FD。
  • FD: SR→PT不满足3NF的定义,因为SR不是超级密钥,或者PT不是主要属性(因为P是主要属性,但组合应是主要属性),因此表不在3NF中(因为如果有一个依赖性)失败,全部失败)。现在我们检查2FD的相同FD
  • FD: SR→PT不满足2NF的定义,因为SR不是超级密钥,也不是PT,它不是主要属性(取决于部分密钥)(部分依赖),因此表也不在2NF中(因为如果一个依赖关系失败,全部失败)。

因此,根据以上两个语句c和d,我们可以说表R(P,Q,R,S,T,U)仅在1NF中。

问题4:给定关系R(P,Q,R,S,T)和功能相关性集合FD = {QR→PST,S→Q},确定给定的R为哪种范式?

解决方案:让我们使用FD在R上构造箭头图以计算候选键。

从R上的箭头图中,我们可以看到属性R不是由任何给定FD所确定的,因此R将成为候选关键字的组成部分,即无论候选关键字是多少,候选关键字是多少将为候选键,但全部具有R强制属性。

让我们计算R的闭包

R + = R(根据我们之前研究的封闭方法)

由于闭包R不包含R的所有属性,因此R不是候选键。

在将R与另一个属性组合时,我们发现RS和RQ决定了R的所有属性,因此RS和RQ是R的候选关键字。

由于R具有5个属性:-P,Q,R,S,T和候选关键字是RS和RQ,因此主要属性(候选关键字的一部分)是SQR,而非主要属性是TP

给定FD为{QR→PST,S→Q},超级键/候选键为RS和RQ

注意:为解决此类问题,我们应用了逆向工程,即首先检查BCNF,如果不是,则检查3NF,如果不是,则检查2NF,依此类推。

  • FD: QR→PST满足BCNF的定义,因为QR是超级键,我们检查其他FD中的BCNF
  • FD: S→Q不满足BCNF的定义,因为S不是超级键,因此表不在BCNF中(因为如果一个依赖项失败,则全部失败),现在我们为3NF检查相同的FD
  • FD: S→Q满足3NF的定义,即使S不是超级键而是Q是主要属性,因此该表位于3NF中。

由于只有两个FD,其中一个(QR→PST)满足BCNF,而另一个(S→Q)满足3NF,因此最高范式为3NF R(P,Q,R,S,T)在3NF。

问题5:给定关系R(A,B,C)和功能依赖关系集FD = {A→B,B→C,并且C→A},确定给定R处于哪种范式?

解决方案:让我们使用FD在R上构造箭头图以计算候选键。

从上面R上的箭头图中,我们可以看到所有属性都由给定FD的所有属性确定,因此我们将检查所有属性(即A,B和C)以查找候选键

让我们计算A的闭包

A + = ABC(根据我们之前研究的封闭方法)

由于闭包A包含R的所有属性,因此A是候选键。

让我们计算B的闭合

B + = BAC(根据我们之前研究的封闭方法)

由于闭包B包含R的所有属性,因此B是候选键。

让我们计算C的闭包

C + = CAB(根据我们之前研究的封闭方法)

由于闭包C包含R的所有属性,因此C是候选键。

因此,三个候选密钥为: AB和C

由于R具有3个属性:-AB和C,因此候选键是AB和C,因此,主属性(候选键的一部分)是ABC,而没有非主属性

给定FD为{A→B,B→C和C→A},而超级键/候选键为AB和C

注意:为解决此类问题,我们应用了逆向工程,即首先检查BCNF,如果不是,则检查3NF,如果不是,则检查2NF,依此类推。

  • FD: A→B满足BCNF的定义,因为A是超级密钥,我们检查其他FD是否存在BCNF
  • FD: B→C满足BCNF的定义,因为B是超级密钥,我们检查其他FD是否存在BCNF
  • FD: CàA满足BCNF的定义,因为C是超级密钥

由于只有三个FD且所有FD:{A→B,B→C和C→A}满足BCNF,因此最高范式为BCNF。

因此,R(A,B,C)在BCNF中。

结论:从以上三个示例中,我们可以得出结论,遵循以下步骤可以确定给定关系模式的正常形式。

步骤1:使用箭头图,然后使用R上的属性闭包,计算给定R的候选键,这样就可以从计算出的候选键中分离素数属性和非素数属性。

步骤2:在逆向工程过程中验证每个FD,即首先检查BCNF,如果不是,则检查3NF,如果不是,则检查2NF,依此类推。

步骤3:如果表格位于BCNF中,则该表格位于3NF,2NF和1NF中,类似地,如果表格位于3NF中,则其位于2NF和1NF中。因此,我们可以说,如果表的格式为高标准格式,那么默认情况下,表的格式为低标准格式。

步骤4:首先使用BCNF定义验证FD(首先应在3NF中,并且在两组属性X和Y之间是否存在非平凡的依存关系,使得X→Y(即,Y不是X的子集)那么X是超级键。

步骤5:如果有任何FD,则STEP 5失败(表示该表不在BCNF中),然后使用3NF的定义验证FD和剩余FD(首先应在2NF中,并且两个之间是否存在非平凡的依赖关系)属性X和Y的集合,使得X→Y(即Y不是X的子集),则X是超级键或Y是素数属性

步骤6:如果有任何FD,则STEP 6失败(表示该表不在BCNF中),然后验证FD和具有2NF定义的剩余FD(没有非素数属性应部分依赖于表的键)。

STEP 7:如果有任何FD,则STEP 7失败(表示该表不在2NF中),因此无需检查其1NF,因为默认情况下它在1NF中。

步骤8:如果所有FD都满足BCNF的定义,那么我们可以说给定R在BCNF中,如果任何FD对BCNF失败,并且FD和剩余FD对3NF都满足,那么我们说R在3NF中,如果有任何FD对于3NF失败,并且FD和剩余FD满足2NF,那么我们说R在2NF中,否则表在1NF中。