规范化理论:如何计算最小依赖集?

什么是最小函数依赖集?

如果函数依赖集F满足一下条件,则称F为一个最小函数依赖集

(1)F中任意一函数的右部仅含有一个属性。

(2)F中不存在这样的函数依赖X→A,使得F与F-{X-A}等价,即F中的函数依赖均不能由F中其他函数依赖导出。

(3)F中不存在这样的函数依赖X→A,X有真子集Z使得F-{X→A}\cup{Z→A}与F等价,即F中各函数依赖的左部均为最小属性集(也就是说左部不存在冗余属性)。

 

如何计算最小函数依赖集?

算法步骤:

(1)将F中的所有函数依赖的右边化为单一属性;

(2)去掉F中的所有函数依赖左边的冗余属性;

(3)去掉F中所有冗余的函数依赖。

F的函数最小依赖集_{}F_{min}并不是唯一的,它与对各函数依赖FD_{i}及X→A中X个属性的处置的顺序有关。

 

【例题】已知函数依赖集F={A→BD, AB→C, C→D},求F的最小函数依赖集。

解题思路:

(1)将F中的所有函数依赖的右边化为单一属性:F={A→B, A→D, AB→C, C→D}。

(2)去掉F中的所有函数依赖左边的冗余属性:观察F,发现可能要处理的函数依赖为AB→C。

         先求属性A关于F的闭包A_{F}^{+}

         A→B,A,B自然在A_{F}^{+}中;

         AB→C,C也在A_{F}^{+}中;

         C→D,D也在A_{F}^{+}中;

(闭包的具体求解算法请参考:如何求属性集X关于F的闭包?

因此,A_{F}^{+}={A, B, C, D},即A能根据Armstrong公理推导出B,C,D,说明函数依赖AB→C左边的属性B是冗余的,可以去掉。处理后的F={A→B, A→D, A→C, C→D}。

同理,还需要看属性B关于F的闭包B_{F}^{+},来判断AB→C左边的A是否是冗余的。B_{F}^{+}={B},因此A不是冗余的。

(3)去掉F中所有冗余的函数依赖关系:我们试着看一下函数依赖A→D是否是冗余的。

         先去掉A→D,处理后的F={A→B, A→C, C→D};

         求A关于处理后F的闭包A_{F}^{+}^{'}^{}A_{F}^{+}^{'}={A, B, C, D};

 发现A_{F}^{+}^{'}=A_{F}^{+},说明即使不需要F中的函数依赖A→D,属性A也能根据Armstrong公理导出D,因此A→D是冗余的,可以去掉,去掉后得到F的最小依赖集F_{min}={A→B, A→C, C→D}。

          

 

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

 

 

 

  • 26
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值