数据库学习笔记_10_函数依赖详解——函数依赖公理及其推得规律和属性闭包

本文深入探讨了Armstrong公理,包括反射律、增加律、转移律等,并详细解释了如何利用这些公理推导出合并律、拆分律及伪传递律。此外,还介绍了依赖闭包和属性闭包的概念及其计算方法,为理解关系数据库中的函数依赖提供了理论基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  首先引入armstrong‘s axioms,

    反射律(reflexivity rule)对于任何为LA(a)子集的LA(b)来说,LA(a)->LA(b)恒成立

    增加律(argumentation rule)若LA(a)->LA(b)成立,则LA(a)LA(y)->LA(b)LA(y)成立

    转移律(transitivity rule)若有LA(a)->LA(b),LA(b)->LA(c),则有LA(a)->LA(c)

  由以上规则我们可以推导出一下规则

    合并律(union rule)若有LA(a)->LA(b),LA(a)->LA(c),则有LA(a)->LA(b)LA(c);

      proof:根据公理,可化为LA(a)->LA(b)LA(a),LA(a)LA(b)->LA(c)LA(b),转移率可得结果。

    拆分律(decomposition rule)若有LA(a)->LA(b)LA(c),则LA(a)->LA(b),LA(a)->LA(c)成立

      proof:根据公理,LA(b)LA(c)->LA(b),LA(b)LA(c)->LA(c)…接下来你们懂的。

    伪传递律,if LA(a)->LA(b),and LA(bc)->LA(d),则LA(a)LA(c)->LA(d);

    求依赖闭包比较蠢得办法是列举一个函数依赖集中所有的二元组看是否能适用任何以上操作,若有则将结果加入该函数依赖集留待下一轮运算,直到该运算无法算出任何结果为止。

    下面介绍一下属性闭包:

    对于一个属性集LA(a),在R中存在F,是的LA(a)中的属性通过F可以得出能被LA(a)支配的属性集合LA(a)+ ,其计算方法为,

    set result=LA(a);

    while(result do not change)

       for(all the functional dependency f LA(x)->LA(y))

          if(x为result子集)  result+=y;

     对于属性闭包的应用:

        为了测定a是否为超键,可以求出a+若其为R,则说明a为超键,否则就不是。

        可以检验函数依赖是否存在,例如我想检查LA(a)->LA(b),则求出LA(a)+ 如果LA(b)为LA(a)+子集,则说明其存在,否则则不存在。

        我们也可以通过求得每一个存在于R里的属性集LA(a)的LA(a)+然后把所有为LA(a)+ 的子集的集合S组合成为LA(a)->S加入到F+里,这是一个求得函数依赖闭包的替换方法。  

转载于:https://www.cnblogs.com/stultus/p/6835291.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值