关系模式中求候选码、闭包、最小依赖函数集、分解成3NF且保持函数依赖、分解成3NF且保持函数依赖和无损连接的方法

前言

在准备研究生复试的过程中,数据库中的关系模式里面有几个问题比较容易混淆。
一个是最小依赖函数集,一个是求候选码,一个是求闭包,一个是要把关系模式分解成3NF且保持函数依赖,一个是分解成3NF且保持函数依赖和无损连接。

记录一下我对这几个问题的求法。可能会有哪里有漏洞,希望可以指出来。

求闭包

什么叫闭包?
闭包就是由一个属性直接或者间接推出的所有属性的集合。
例如:a→b,b→c;那么a的闭包就是{a,b,c};

例子:设有关系模式R(A,B,C,D),F是R上的FD集,F={AB→C, C→D, E→A, D→B},求属性集AB的闭包;

解:
要求AB的闭包,首选我们可以设AB的闭包为X={A,B};
要找到AB的闭包,那么就是在X的基础上,只要是X的子集能直接或者间接推出的属性,就把它给加到X里面,然后再在这个新的X基础上,再继续查找是否有属性能被X的子集推出,有的话添加进去X里面,没有则结束。

由于AB→C,那么就把C加到X中,C又可以推出D,则把D也加到X中,D可以推出B,但是B已经在X里面了,继续检查,已经检查完毕,所以AB的闭包就是{A,B,C,D};

求候选码

候选码的定义:能唯一地标识一个元组的属性组的值,就称为候选键,也就是不含有多余属性的超键。(即候选键的子集就不能唯一地标识元组了)

设关系模式有N个属性,全集U中属性在FD集中有四种情况:
①只出现在F左边
②只出现在F右边
③在F的左右均出现
④不出现在F中

notes:
、只出现在F右边的属性,肯定不属于候选键;
、只出现在F左边的属性,一定存在于某个候选码里面,如果它的闭包是U,那么它一定是候选码;
、出现在F左右两边的属性,如果它的闭包是U,那么它一定是候选码,如果闭包不是U,那么再让其与另外一个同样出现在F左右两边的属性结合,再求闭包;
、 不出现在F中的属性,直接添加到候选码当中;

例子:设有关系模式R(A,B,C,D,E),F={A→CD,BC→E,D→B,E→A}为R上的函数依赖集,试求R上的所有候选码;

解:
首先观察函数依赖集F,对其中的属性进行分组,
只出现在F左边:无
只出现在F右边:无
出现在F左右两边:A,B,C,D,E
不出现在F中:无

对属性进行了分类之后,这个例子里面的属性均出现在F左右两边,那么就要先对每个属性求闭包;(根据上面求闭包的方法
A的闭包:{A,B,C,D,E};因为闭包是U,所以属性A是候选码;
B的闭包:{B};
C的闭包:{C};
D的闭包:{D,B};
E的闭包:{A,B,C,D,E};因为闭包是U,所以E是候选码;

对剩下的三个属性B,C,D继续组合求闭包;
(这里注意为什么不用再考虑A和E属性,这里需要注意候选码的定义:候选码是不能有多余属性的超键,候选码的子集是不能够唯一标识元组的,否则我们把A和E考虑进去,求出来的就是超键而不是候选键)

对B和C组合,求BC的闭包:{A,B,C,D,E},闭包是U,所以是候选码;
对B和D组合,求BD的闭包:{B,D},不是候选码;
对C和D组合,求CD的闭包:{A,B,C,D,E},闭包是U,是候选码;

到了这里就已经结束了;
所以R上的所有候选码是(E),(A),(B,C),(C,D);

补充:如果R上还有一个属性G没有出现在函数依赖集F中,也就是属性G是上面所说的第四种情况,那就把属性G添加到候选码当中。

求候选码其实就是求闭包;

最小函数依赖集

最小函数依赖集,通俗的说,其实就是**不含有冗余属性和冗余依赖关系,且F的依赖关系中的右边全部都是单一属性;**

求最小函数依赖集的**步骤**:
1、将F中的所有依赖右边化为单一元素;
2、去掉F中的所有依赖左边的冗余属性;
3、去掉F中所有冗余依赖关系;

例子:F={ABD→E,AB→G,B→F,C→J,CJ→I,G→H};求最小函数依赖集;

解:
将F中的所有依赖右边化为单一元素;这里已经满足了;
(举个例子,如果有A→CD,就拆开成A→C,A→D);

去掉F中的所有依赖左边的冗余属性
(对于依赖左边有多个属性的,去掉其中一个,看是否还能使依赖关系成立,如果成立,那么去掉的这个属性是冗余的,否则就不是冗余的)

ABD→E,假如去掉A,求出BD的闭包,不包含E,所以属性A不冗余,不能去掉A,同理,如果去掉B或者D,AD和AB的闭包都不包含E,所以都不冗余;

同理,AB→G,A和B都不冗余;
B→F,C→J,G→H这三个的依赖左边都只有单个属性,所以跳过不考虑;

剩下最后一个CJ→I,这里如果去掉C,J的闭包是不包含有I的,所以C不冗余,但是如果去掉J,因为C→J,所以J是冗余的,所以这里去掉冗余属性J;

所以整理后,F={ABD→E,AB→G,B→F,C→J,C→I,G→H};

去掉F中所有冗余依赖关系
(这里是从F中去掉某个依赖关系,例如去掉了X→Y,从剩下的依赖关系中,求X的闭包,若闭包中包含了Y,那么X就是冗余的,需要去掉);

如果去掉ABD→E,F就剩下了F={AB→G,B→F,C→J,C→I,G→H};
这里我们求ABD的闭包,闭包是{A,B,D,G,H,F},不包含E,所以ABD不冗余,不可去掉;

同理,如果去掉AB→G,AB的闭包是{A,B,F},不包含G,所以不冗余,不能去掉;

同理,B→F,C→J,C→I,G→H都不是冗余的,不能去掉;

所以最小函数依赖集F={ABD→E,AB→G,B→F,C→J,C→I,G→H};

题目参考:最小函数依赖集百度百科

分解成3NF且保持函数依赖

参考了书本上的模式分解的算法,对于分解成3NF保持函数依赖的分解,书本上用的是合成法。

思路:
①对函数依赖集F进行极小化处理,即把F变为最小依赖函数集F’;
②对所有不出现在F’中的属性记为U0,把这些属性从U中去掉,剩余的属性仍然记为U;
③对F‘按照具有相同左部的原则分组,对于每一组的并集,如果可以组合成U,那么3NF的分解完成。

这里参考了JensLee的博客;
这位博主在中间加了两个步骤:
①如果求得的函数最小依赖集左部都是单属性,则已经完成对关系模式的3NF分解,结束。
②去掉多余的函数传递依赖;

例子:关系模式R<U,F>,有U={A,B,C,D,E,S,G},F={B→G,CE→B,C→A,CE→G,B→D,C→D};将关系模式分解为3NF且保持函数依赖;

解:
首先求出最小函数依赖集, 根据前面给出的例子,这里过程就不再赘述;
求出最小函数依赖集F={B→G,CE→B,C→A,B→D,C→D};

这里F中没有出现属性S,所以把它从U中去掉,新的U是{A,B,C,D,E,G};

然后将F按照左部 相同的原则进行组合,就变成了(BGD),(CEB),(CAD);
(这里检查一下,把三个组并起来,能重新组合成U,所以分组没问题)

这里就可以下结论,已经完成了3NF的分解,且 保持函数依赖;
结果为:(BGD),(CEB),(CAD);

分解成3NF且保持函数依赖和无损连接

这里的情况和分解成3NF并保持函数依赖挺像的,但是多了一个约束条件:要保持无损连接

参考了书本上的算法和high-functioning的博客;

下面给出分解的方法步骤:
①先求出保持函数依赖的3NF分解;
②求出关系模式的候选码;
③对保持函数依赖的分解结果和候选码作并集∪,令τ= ρ ∪{R(X)};
④若存在X⊆Ui,则将R(X)从τ中去掉;若存在Ui⊆X,则将R(Ui)从τ中去掉;

例子:(还是选用上例进行分析)
关系模式R<U,F>,有U={A,B,C,D,E,S,G},F={B→G,CE→B,C→A,CE→G,B→D,C→D};将关系模式分解为3NF且保持函数依赖和无损连接;

解:

上面已经求出了保持函数依赖的3NF分解,结果为(BGD),(CEB),(CAD);

求关系模式的候选码,这里求出的候选码为:{SCE};(过程不再赘述)

对候选码和分解结果作∪,τ={R1(BGD),R2(CEB),R3(CAD),Rx(SCE)};

由于Ui和X之间没有包含关系,所以 答案即为所求。

结果为:τ={R1(BGD),R2(CEB),R3(CAD),Rx(SCE)};
(结果为保持了函数依赖和无损连接的3NF分解)

  • 58
    点赞
  • 198
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
### 回答1: 计算二元自相关函数是指对于给定的二元信号,通过对信号的两个变量进行相关运算来衡量它们之间的相似度。这个过程可以通过数学公式来实现。 首先,我们需要有一对二元信号,假设为(x,y),其中 x 和 y 是两个变量。 接下来,我们可以按照以下步骤来计算二元自相关函数。 1. 首先,计算信号的均值。我们可以分别计算 x 和 y 的均值,分别记为 x_mean 和 y_mean。 2. 然后,计算 x 和 y 的方差,分别记为 x_var 和 y_var。 3. 计算信号的协方差。我们可以通过以下公式来计算协方差: cov(x,y) = E[(x - x_mean)(y - y_mean)] 其中,E[.] 表示期望值。 4. 最后,计算二元自相关函数。我们可以通过以下公式来计算: r(x,y) = cov(x,y) / sqrt(x_var * y_var) 其中 sqrt(.) 表示平方根。 这样,我们就可以得到二元自相关函数的值。 二元自相关函数可以用来衡量给定二元信号中两个变量之间的相关。当二元自相关函数接近1时,表示两个变量之间的相关较强;当二元自相关函数接近0时,表示两个变量之间的相关较弱或不存在。这对于分析二元信号的特征和关系非常有帮助。 ### 回答2: 计算二元自相关函数是指对于二维信号或数据,通过一定的算法来计算此信号或数据在自身上的相关。 计算二元自相关函数方法一般是通过将二维信号或数据分别在水平和垂直方向上进行平移,并将平移后的信号与原信号进行相关计算。 具体的计算步骤如下: 1. 将二维信号或数据进行归一化处理,使得数据范围在0到1之间。 2. 分别对信号或数据在水平和垂直方向上进行平移。平移的步长可以根据需进行调整,一般可以设置为1个像素或一个单元格。 3. 对于每一次平移,计算平移后的信号与原信号的相关。可以使用皮尔逊相关系数或其他相关系数来衡量两个信号之间的相关。 4. 将每一次平移所得到的相关值保存起来,形成二元自相关函数的图像。 通过计算二元自相关函数,可以得到信号或数据在不同位置的相关分布图像,从而可以分析信号或数据的空间相关特征,进一步了数据的结构和特征。 需要注意的是,计算二元自相关函数的结果是一个二维图像,其中的数值表示对应位置的相关值。这个图像可以用来分析信号或数据的自相关,并可用于图像处理、模式识别等领域。 ### 回答3: 二元自相关函数指的是用于描述两个随机变量之间相关的统计量。计算二元自相关函数方法可以通过以下步骤进行: 首先,假设我们有两个随机变量X和Y,其中X的取值为x1,x2,...,xn,而Y的取值为y1,y2,...,yn。 然后,我们需要计算X和Y的均值,即: 出X的均值μX=(x1+x2+...+xn)/n, 出Y的均值μY=(y1+y2+...+yn)/n。 接下来,我们需要计算X和Y的方差,即: 出X的方差σX²=((x1-μX)²+(x2-μX)²+...+(xn-μX)²)/n, 出Y的方差σY²=((y1-μY)²+(y2-μY)²+...+(yn-μY)²)/n。 然后,我们需要计算X和Y的协方差,即: 出X和Y的协方差σXY=((x1-μX)(y1-μY)+(x2-μX)(y2-μY)+...+(xn-μX)(yn-μY))/n。 最后,通过以下公式计算二元自相关函数ρXY: ρXY=σXY/(σX*σY)。 计算出的二元自相关函数的取值范围为-1到1。如果ρXY=1,则表示X和Y之间有完全正相关的关系;如果ρXY=-1,则表示X和Y之间有完全负相关的关系;如果ρXY=0,则表示X和Y之间没有线相关。 以上是计算二元自相关函数方法,通过这一统计量,我们可以了到两个随机变量之间的相关程度,有助于进一步的数据分析和模型建立。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值