数据库闭包怎么计算?

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

已知关系模式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:.将F中的所有依赖右边化为单一元素

AB->C

C->A

BC->D

ACD->B

BE->C

CE->F

CE->A

CF->B

CF->D

D->E

D->F

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

去掉AB->C

闭包是可以包含自由(未绑定)变量代码块;这些变量不是在这个代码块或者任何全局上下文中定义的,而是在定义代码块的环境中定义。“闭包” 一词来源于以下两者的结合:要执行的代码块(由于自由变量的存在,相关变量引用没有释放)和为自由变量提供绑定的计算环境(作用域)。在 Scheme、Common Lisp、Smalltalk、Groovy、JavaScript、Ruby 和 Python 等语言中都能找到对闭包不同程度的支持。

闭包的价值在于可以作为函数对象 或者匿名函数,对于类型系统而言这就意味着不仅要表示数据还要表示代码。支持闭包的多数语言都将函数作为第一级对象,就是说这些函数可以存储到变量中、作为参数传递给其他函数,最重要的是能够被函数动态地创建和返回。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

    保存