关系模式最小依赖集怎么求_数据库原理笔记(四)——关系数据库理论(二)

本文详细介绍了数据库理论中的Armstrong公理系统,包括自反律、增广律、传递律等,并探讨了模式分解的基础,如闭包的概念、最小依赖集的求解以及无损连接性和保持函数依赖的判断方法。同时,讲解了如何将关系模式转换为3NF的分解过程,旨在确保信息完整性并减少冗余。
摘要由CSDN通过智能技术生成

数据依赖的公理系统

  • 公理系统是模式分解的基础
  • Armstrong公理系统(找到推出结果的感觉就ok,没必要死记)
    • 自反律:X确定他自己的一部分
    • 增广律
    • 传递律
    • 合并规则
    • 伪传递规则
    • 分解规则
  • 闭包(不可求):在关系模式R<U,F>中,F所蕴含的函数依赖全体,记作F+
  • 属性集闭包(可求):在给定F+的情况下,去求X可以确定哪些属性

cde7a616bfd5a849b7ae605aa5cd7c8f.png
  • 关于闭包的引理:

77b1a224fe2215efe7d50a8979d10e2b.png
  • 属性集闭包的算法

5c123c64737f5c1c49289f00ef4fb5b8.png
第2步是去找X可以确定的属性
  • 最小依赖集(Fm)
    • 为模式分解做准备
    • 右部为单属性
    • 没有多余的函数依赖
    • 决定因素没有多余的属性(XB->Y,X->Y;B就是多余的)
  • 极小化过程:求最小依赖集
    • 逐一检查右部是否为单属性,若不是,则拆开
    • 逐一检查各个函数依赖,若该依赖可以由其他推出,若有,去除该函数依赖
    • 去掉多余属性

db057d92d8375e49d46fe093230634e8.png

模式的分解

  • 模式分解理论基础
    • 希望分解后能继续携带完整信息
    • 希望函数依赖集合依赖数量比较少
    • 希望获得一个可以反映所有需求的最小函数依赖集合
  • 三种模式分解等价的定义
    • 无损连接性
      • 关系模式R<U,F>被分解为若干模式,R与R1,R2,R3,......,Rn自然连接结果相等,则称具有无损连接性
      • 不一定能解决数据操作异常问题
    • 保持函数依赖
      • 关系模式R<U,F>被分解为若干模式,F所逻辑蕴含的函数依赖一定可以由分解得到的某个关系模式中的函数依赖Fi逻辑蕴含,则称保持函数依赖
    • 无损连接性和保持函数依赖
  • 举例:

dcd3a965d9515c8902344bea203d028f.png

edcbc9c88272870935ab87510adf03eb.png

648bd05d29c2f9e8e6fe0d357dd2cfc0.png

dbade974521c043a17f9966a7f6ea8b6.png
  • 分解算法
    • 算法6.2
      • 判断分解的无损连接性
      • 举例:判断分解ρ={AB,AE,EC,DBC,AC}是否具有无损连接性?

be43a1900f87d54e2a4a74840c0a11d4.png
候选码用算法求出为C,E

f9d355f0e3f92c51befa908295426cfc.png
      • 第一步:构建一张表N行为模式分解之后变成了多少关系就有多少行,K列为原关系的所有属性;接着将表中元素填满。比如对于第一行AB来说,用到了第一列和第二列属性,所以就填a1,a2,没用到就填b13等(1,3表示行和列)
      • 第二步:根据函数依赖关系改变表中元素的值。比如对于第一个函数依赖A->D,找到A列中元素一样的行(至少两个才有意义),由于依赖关系,我们需要修改D列上的元素,如果元素全为b,将其下标行号修改为最小行号;如果元素中有a,将所有行全改为a

9414a9fe4c1f9719504aa40f154c2cb8.png

d818fd7ad7edb627c051f6c284e88195.png
      • 第三步:遍历完所有的函数依赖,判断假如有一行全为a,则说明分解保持无损连接性,否则再遍历
      • 快速方法:完全不考虑b和下标,对于每个行来说,哪一个属性被使用,就在该行填a;再根据函数依赖在其他列填a,比如A确定D,就在D列填a

e2d23509c0b3f1dec1637a1c7708e231.png
    • 算法6.3(※)
      • 转化为3NF的保持函数依赖的分解
      • 第一步:求最小函数依赖集Fm
      • 第二步:将没有在函数依赖集中出现的属性去掉,其余的不变组成U0
      • 第三步:按照完全相同的左部,对函数依赖集进行分组,判断一下分完组的属性有没有重复的情况,比如:BCD包含BD,去掉重复的部分,算法结束
    • 算法6.4(※)
      • 转换为3NF既有无损连接性又保持函数依赖的分解
      • 第一步:按照算法6.3分解之后的关系并上原来关系的码,比如ρUR*
      • 第二步:判断合并之后的关系里面有没有重复或者包含的属性,有的话就去掉,和算法6.3去重相似

f52e74f6cbf0a9ecc157cb753a20f993.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值