数据库求闭包,求最小函数依赖集,求候选码,判断模式分解是否为无损连接,3NF,BCNF

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.说白话一点:闭包就是由一个属性直接或间接推导出的所有属性的集合。

例(1):设有关系模式R(U,F),其中U={A,B,C,D,E,I},F={A→D,AB→E,BI→E,CD→I,E→C},计算(AE)+

解: (1) 令X={AE},X(0)=AE

(2)在F中寻找尚未使用过的左边是AE的子集的函数依赖,结果是: A→D,E→C;所以

X(1)=X(0)DC=ACDE,显然X(1)≠X(0).

(3) 在F中寻找尚未使用过的左边是ACDE的子集的函数依赖,结果是: CD→I;所以

X(2)=X(1)I=ACDEI。虽然X(2)≠X(1),但F中寻找尚未使用过函数依赖的左边已经没有X(2)的子集,所以不必再计算下去,即(AE)+=ACDEI。

例如:f={a->b,b->c,a->d,e->f};由a可直接得到b和d,间接得到c,则a的闭包就是{a,b,c,d}

2.候选码的求解理论和算法

对于给定的关系R(A1,A2,…An)和函数依赖集F,可将其属性分为4类:

L类仅出现在函数依赖左部的属性。

R 类仅出现在函数依赖右部的属性。

N 类在函数依赖左右两边均未出现的属性。

LR类在函数依赖左右两边均出现的属性。

定理:对于给定的关系模式R及其函数依赖集F,若X(X∈R)是L类属性,则X必为R的任一候选码的成员。

推论:对于给定的关系模式R及其函数依赖集F,若X(X∈R)是L类属性,且X+包含了R的全部属性;则X必为R的唯一候选码。

例(2):设有关系模式R(A,B,C,D),其函数依赖集F={D→B,B →D,AD →B,AC →D},求R的所有候选码。

解:考察F发现,A,C两属性是L类属性,所以AC必是R的候选码成员,又因为(AC)+=ABCD,所以AC是R的唯一候选码。

定理:对于给定的关系模式R及其函数依赖集F,若X(X∈R)是R类属性,则X不在任何候选码中。

定理:对于给定的关系模式R及其函数依赖集F,若X(X∈R)是N类属性,则X必包含在R的任一候选码中。

推论:对于给定的关系模式R及其函数依赖集F,若X(X∈R)是L类和N类组成的属性集,且X+包含了R的全部属性;则X是R的唯一候选码。

具体的步骤:

算法描述

(1)将R 的所有属性分为L、R、LR 和N 四类,并令X 代表L、N 类,Y 代表LR 类。

(2)求X+。若X+包含了R 的全部属性,则即为R 的唯一候选码,转(5);否则,转(3)。

(3)在Y 中取一属性A,求(XA)+ ,若它包含了R 的全部属性,则是候选码,转(4);否则,调换一属性反复进行这一过程,直到试完所有Y 中的属性。

(4)如果已找出所有候选码,则转(5);否则在Y 中依次取2 个、3 个、…,求它们的属性闭包,若其闭包包含R 的全部属性,则是候选码。

(5)结束。

3.求最小函数依赖集分三步:

①将F中的所有依赖右边化为单一元素

此题fd={abd->e,ab->g,b->f,c->j,cj->i,g->h};已经满足

②去掉F中的所有依赖左边的冗余属性.

作法是属性中去掉其中的一个,看看是否依然可以推导

此题:abd->e,去掉a,则(bd)+不含e,故不能去掉,同理b,d都不是冗余属性

ab->g,也没有

cj->i,因为c+={c,j,i}其中包含i所以j是冗余的.cj->i将成为c->i

F={abd->e,ab->g,b->f,c->j,c->i,g->h};

③去掉F中所有冗余依赖关系.

做法为从F中去掉某关系,如去掉(X->Y),然后在F中求X+,如果Y在X+中,则表明x->是多余的.需要去掉.

此题如果F去掉abd->e,F将等于{ab->g,b->f,c->j,c->i,g->h},而(abd)+={a,d,b,f,g,h},其中不包含e.所有不是多余的.

同理(ab)+={a,b,f}也不包含g,故不是多余的.

b+={b}不多余,c+={c,i}不多余

c->i,g->h多不能去掉.

所以所求最小函数依赖集为F={abd->e,ab->g,b->f,c->j,c->i,g->h};

4.判断模式分解是否为无损连接

方法一:无损连接定理

关系模式R(U,F)的一个分解,ρ={R1,R2}具有无损连接的充分必要条件是:

U1∩U2→U1-U2 €F+ 或U1∩U2→U2 -U1€F+

方法二:算法

ρ={R1,R2,...,R k}是关系模式R的一个分解,U={A1,A2,...,A n},

F={FD1,FD2,...,FD p},并设F是一个最小依赖集,记FD i为X i→A lj,其步骤如下:

①建立一张n列k行的表,每一列对应一个属性,每一行对应分解中的一个关系模式。若属性A j U i,则在j列i行上真上a j,否则填上b ij;

②对于每一个FD i做如下操作:找到X i所对应的列中具有相同符号的那些行。考察这些行中l i列的元素,若其中有a j,则全部改为a j,否则全部改为b mli,m是这些行的行号最小值。

如果在某次更改后,有一行成为:a1,a2,...,a n,则算法终止。且分解ρ具有无损连接性,否则不具有无损连接性。

对F中p个FD逐一进行一次这样的处理,称为对F的一次扫描。

③比较扫描前后,表有无变化,如有变化,则返回第②步,否则算法终止。如果发生循环,那么前次扫描至少应使该表减少一个符号,表中符号有限,因此,循环必然终止。

举例1:已知R,U={A,B,C},F={A→B},如下的两个分解:

① ρ1={AB,BC}

② ρ2={AB,AC}

判断这两个分解是否具有无损连接性。

①因为AB∩BC=B,AB-BC=A,BC-AB=C

所以B→A ¢F+,B→C ¢ F+

故ρ1是有损连接。

②因为AB∩AC=A,AB-AC=B,AC-AB=C

所以A→B €F+,A→C ¢F+