数据库闭包怎么算的?

数据库闭包怎么算的?,第1张

闭包就是由一个属性直接或间接推导出的所有属性的集合,例如: f={a->b,b->c,a->d,e->f} ,由a可直接得到b和d,间接得到c,则a的闭包就是{a,b,c,d}。

例:设关系R(A,B,C, D,E, G)有函数依赖集F={AB→C, BC→AD,D→E, CG→B},求AB的闭包。

解:首先从AB出发,令X={A,B},由于函数依赖AB→C左边的所有属性都在X中,所以可以把右边的C添加到X中,这时X={A, B,C},其次考虑函数依赖BC→AD,左边B,C均在X中,右边D不在X中,将其添加到X中,此时X={A,B,C,D}。

再考虑函数依赖D→E,同理可将E添加到X中,此时x={A,B,C,D,E}。上述方法再不能向X中添加属性,所以得到{A,B} +={A,B,C,D, E}。

扩展资料:

使用闭包的注意点

1,由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。

2,闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。

已知关系模式R<U,F>,其中

U={A,B,C,D,E};

F={AB→C,B→D,C→E,EC→B,AC→B}。

求(AB)F+ 。

解 设X(0)=AB;

(1)计算X(1): 逐一的扫描F集合中各个函数依赖,

找左部为A,B或AB的函数依赖。得到两个:

AB→C,B→D。

于是X(1)=AB∪CD=ABCD。

(2)因为X(0)≠ X(1) ,所以再找出左部为ABCD子集的那些函数依赖,又得到AB→C,B→D, C→E,AC→B,

于是X(2)=X(1)∪BCDE=ABCDE。

(3)因为X(2)=U,算法终止

所以(AB)F+ =ABCDE。

求属性集X(X  U)关于U上的函数依

赖集F 的闭包XF+

输入:X,F

输出:XF+

步骤:

(1)令X(0)=X,i=0

(2)求B,这里B = { A |( V)(  W)(V→WF

∧V  X(i)∧A W)};

(3)X(i+1)=B∪X(i)

(4)判断X(i+1)= X (i)吗?

(5)若相等或X(i)=U , 则X(i)就是XF+ ,

算法终止。

(6)若否,则 i=i+l,返回第(2)步。

对于算法6.l, 令ai =|X(i)|,{ai }形成一个步长大

于1的严格递增的序列,序列的上界是 | U |,因

此该算法最多 |U| - |X| 次循环就会终止。

(1)求属性集的闭包,其实就是求各属性的闭包,然后整合去重复。

闭包就是由一个属性直接或间接推导出的所有属性的集合

A可以直接导出C A+={A,C}

D可以直接导出A C D+={A,C,D}

所以(AD)+={A,C,D}

B可以直接导出A,C B+={A,B,C}

(2)关键码的求解理论和算法对于给定的关系R(A1A2…An)和函数依赖集F ,可将其属性分为4类:L类:仅出现在F函数依赖左部的属性

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

N类:在F函数依赖的左右两部均未出现的属性

LR类:函数依赖的左右两部均出现的属性定理:

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

所以可以看出BD是R的唯一关键码

(3)求最小函数依赖集

1.根据分解性先分解所有依赖的右边为单属性

F={A->C,C->A,B->A,B->C,D->A,D->C}

2.对所有依赖的左边为多属性的情况,消除左侧冗余属性

3.去除多余的函数依赖{A->C,C->A,B->A,D->A}

不知道对不对,对的话就继续。。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/6813518.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-28
下一篇2023-03-28

发表评论

登录后才能评论

评论列表(0条)

    保存