规范化理论:如何求属性集X关于F的闭包?

什么是属性集X关于F的闭包?

在关系模式R<U, F>中为F所逻辑蕴涵的函数依赖的全体叫做F的闭包(closure),记作F^{+}

设F为属性集U上的一组函数依赖,X\subseteqU,X_{F}^{+}={A|X→A能由F根据Armstrong公里导出},X_{F}^{+}称为属性集X关于函数依赖集F的闭包。

 

另外,

设F为属性集U上的一组函数依赖,X,Y\subseteqU,X→Y能由F根据Armstrong公理导出的充分必要条件是Y\subseteqX_{F}^{+}

因此,判断X→Y是否能够由F根据Armstrong公理推导出的问题,就转化为求X_{F}^{+}的问题,判断Y是否为X_{F}^{+}的子集即可。

X_{F}^{+}可以用算法来求得!

 

如何求属性集X关于F的闭包X_{F}^{+}

算法的核心思想是迭代。我们看这面这个例子。

【例题】已知关系模式R<U, F>,U是属性全集,F是U上的函数依赖集,其中U={A, B, C, D, E},F={AB→C, B→D, C→E, EC→B, AC→B},求\left ( AB \right )_{F}^{+}

解题思路:

(1)设X^{\left ( 0 \right )}=AB,计算X^{\left ( 1 \right )}:从左逐一扫描函数依赖集函数依赖集F,找到左边属性为AB,或者A,或者B的函数依赖。

                   AB→C

                   B→D

         X^{\left ( 1 \right )}=AB\cupCD=ABCD

(2)因为X^{\left ( 1 \right )}\neqX^{\left ( 0 \right )},继续计算X^{\left ( 2 \right )}:寻找F中左边属性为ABCD子集的函数依赖,当然这里不再包括(1)中的。

                   C→E

                   AC→B

         X^{\left (2\right )}=X^{\left (1\right )}\cupBE=ABCDE

(3)此时X^{\left ( 2\right )}\neqX^{\left (1 \right )},但X^{\left ( 2\right )}已经是全部属性的集合,终止计算(如果X^{\left ( i\right )}=X^{\left (i-1\right )},则X^{\left ( i\right )}为所求的闭包,同样终止计算)。

 最终得到的计算结果为,\left ( AB \right )_{F}^{+}=ABCDE。

 

 

 

参考自:《数据库系统概论》,王珊,萨师煊编著

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值