无损连接和模式分解题型
一、判别一个分解的无损连接性
方法一:无损连接定理
关系模式R(U,F)的一个分解ρ={R1<U1,F1>,R2<U2,F2>}具有无损连接的充分必要条件是:
U1∩U2→U1-U2 €F+ 或U1∩U2→U2 -U1€F+
方法二:算法
ρ={R1<U1,F1>,R2<U2,F2>,...,Rk<Uk,Fk>}是关系模式R<U,F>的一个分解,U={A1,A2,...,An},F={FD1,FD2,...,FDp},并设F是一个最小依赖集,记FDi为Xi→Alj,其步骤如下:
① 建立一张n列k行的表,每一列对应一个属性,每一行对应分解中的一个关系模式。若属性Aj属于Ui,则在j列i行上填上aj,否则填上bij;
② 对于每一个FDi做如下操作:找到Xi所对应的列中具有相同符号的那些行。考察这些行中i列的元素,若其中有aj,则全部改为aj,否则全部改为bmi,m是这些行的行号最小值。
如果在某次更改后,有一行成为:a1,a2,...,an,则算法终止。且分解ρ具有无损连接性,否则不具有无损连接性。
对F中p个FD逐一进行一次这样的处理,称为对F的一次扫描。
③ 比较扫描前后,表有无变化,如有变化,则返回第② 步,否则算法终止。如果发生循环,那么前次扫描至少应使该表减少一个符号,表中符号有限,因此,循环必然终止。
举例1:已知R<U,F>,U={A,B,C},F={A→B},如下的两个分解:
① ρ1={AB,BC}
② ρ2={AB,AC}
判断这两个分解是否具有无损连接性。
①因为AB∩BC=B,AB-BC=A,BC-AB=C
所以B→A ¢F+,B→C ¢ F+,故ρ1是有损连接。
② 因为AB∩AC=A,AB-AC=B,AC-AB=C
所以A→B €F+,A→C ¢F+,故ρ2是无损连接。
举例2:已知R<U,F>,U={A,B,C,D,E},F={A→C,B→C,C→D,DE→C,CE→A},R的一个分解为R1(AD),R2(AB),R3(BE),R4(CDE),R5(AE),判断这个分解是否具有无损连接性。
① 构造一个初始的二维表,若“属性”属于“模式”中的属性,则填aj,否则填bij
② 根据A→C,对上表进行处理,由于属性列A上第1、2、5行相同均为a1,所以将属性列C上的b13、b23、b53改为同一个符号b13(取行号最小值)。
③ 根据B→C,对上表进行处理,由于属性列B上第2、3行相同均为a2,所以将属性列C上的b13、b33改为同一个符号b13(取行号最小值)。
④ 根据C→D,对上表进行处理,由于属性列C上第1、2、3、5行相同均为b13,所以将属性列D上的值均改为同一个符号a4。
⑤ 根据DE→C,对上表进行处理,由于属性列DE上第3、4、5行相同均为a4a5,所以将属性列C上的值均改为同一个符号a3。
⑥ 根据CE→A,对上表进行处理,由于属性列CE上第3、4、5行相同均为a3a5,所以将属性列A上的值均改为同一个符号a1。
⑦ 通过上述的修改,使第三行成为a1a2a3a4a5,则算法终止。且分解具有无损连接性。
二、模式分解
1.达到BCNF无损连接分解算法
例:关系模式R<U,F>,其中:U={A,B,C,D,E},F={A→C,C→D,B→C,DE→C,CE→A},将其分解成BCNF并保持无损连接。
解:
① 令ρ={R(U,F)}。
② ρ中不是所有的模式都是BCNF,转入下一步。
③ 分解R:
- R上的候选码为BE(因为所有函数依赖的右边没有BE)。
- 考虑A→C函数依赖不满足BCNF条件(因A不包含候选码BE),将其分解成R1(AC)、R2(ABDE)。
- 计算R1和R2的最小函数依赖集分别为:F1={A→C},F2={B→D,DE→D,BE→A}。其中B→D是由于R2中没有属性C且B→C,C→D;DE→D是由于R2中没有属性C且DE→C,C→D;BE→A是由于R2中没有属性C且B→C,CE→A。又由于DE→D是蕴含关系,可以去掉,故F2={B→D,BE→A}。
分解R2:R2上的候选码为BE。考虑B→D函数依赖不满足BCNF条件,将其分解成R21(BD)、R22(ABE)。计算R21和R22的最小函数依赖集分别为:F21={B→D},F22={BE→A}。
由于R22上的候选码为BE,而F22中的所有函数依赖满足BCNF条件。故R可以分解为无损连接性的BCNF如:ρ={R1(AC),R21(BD),R22(ABE)}
2.达到3NF且保持函数依赖的分解
例:关系模式R<U,F>,其中U={C,T,H,I,S,G},F={CS→G,C→T,TH→I,HI→C,HS→I},将其分解成3NF并保持函数依赖。
(一)计算F的最小函数依赖集
① 利用分解规则,将所有的函数依赖变成右边都是单个属性的函数依赖。由于F的所有函数依赖的右边都是单个属性,故不用分解。 ——单属性化
② 去掉F中多余的函数依赖 ——无冗余化
A.设CS→G为冗余的函数依赖,则去掉CS→G,得:
F1={C→T,TH→I,HI→C,HS→I}
计算(CS)F1+:
设X(0)=CS
计算X(1):扫描F1中各个函数依赖,找到左部为CS或CS子集的函数依赖,找到一个C→T函数依赖。故有X(1)=X(0)∪T=CST。
计算X(2):扫描F1中的各个函数依赖,找到左部为CST或CST子集的函数依赖,没有找到任何函数依赖。故有X(2)=X(1)。算法终止。
(CS)F1+= CST不包含G,故CS→G不是冗余的函数依赖,不能从F1中去掉。
B.设C→T为冗余的函数依赖,则去掉C→T,得:
F2={CS→G,TH→I,HI→C,HS→I}
计算(C)F2+:
设X(0)=C
计算X(1):扫描F2中的各个函数依赖,没有找到左部为C的函数依赖。故有X(1)=X(0)。算法终止。故C→T不是冗余的函数依赖,不能从F2中去掉。
同理可判断TH→I,HI→C,HS→是不是冗余的函数依赖
③ 去掉F5中各函数依赖左边多余的属性(只检查左部不是单个属性的函数依赖)——既约化
没有发现左边有多余属性的函数依赖。举例:CS→G 去掉C得到S→G这是无法由后面的依赖推出的,同理去掉S,同样的方法对其他所有的函数依赖进行检验
故最小函数依赖集为:F={CS→G,C→T,TH→I,HI→C,HS→I}
(二)由于R中的所有属性均在F中都出现,所以转下一步。
如果R中存在一些不在Fm中出现的属性,将它们单独构成一个关系模式,并从U中去掉它们
举例: U={C,T,H,R,S,G},F={CS→G}
由于T,H,R没有在F中出现,于是将R1={THP}作为一个分解关系(三)对F按具有相同左部的原则分为:R1=CSG,R2=CT,R3=THI,R4=HIC,R5=HSI。所以ρ={R1(CSG),R2(CT),R3(THI),R4(HIC),R5(HSI)}。
相同左部分的原则:
对于F中的每一个函数依赖X→A,构造一个关系模式XA.如果X→A1,X→A2····X→An均属于F,则构造一个关系模式XA1A2····An
举例:C→T ,C→A是相同的左部,则将二者合并为一个关系C→AT
3.达到3NF且同时保持无损连接与函数依赖的分解
综合题:
无损连接和模式分解题型相关推荐
- 【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)
关系数据理论 6.1 为什么要学习关系数据理论 什么是好的数据库逻辑设计 什么是数据依赖 关系模式的简化表示 6.2 规范化 - 关系的规范化理论 6.2.1 函数依赖 1.函数依赖 2.平凡函数依赖 ...
- 判断模式分解是否为无损连接的方法
判断模式分解是否为无损连接的方法 [方法步骤] ρ = { R1<U1 , F1> , R2<U2 , F2> , - , Rk<Uk , Fk> } 是关系模式 ...
- 数据库中的模式分解与无损连接性
无损连接分解的普通判别方法--表格法 设关系模式R=A1,-,An,R上成立的FD集F,R的一个分解p={R1,-,Rk}.无损连接分解的判断步骤如下: (1)构造一张k行n列的表格,每列对应一个属性 ...
- 关系模式判断候候选关键字 与 函数依赖无损连接
关系模式判断候候选关键字 与 函数依赖无损连接 例题:设关系模式R(U, F),其中R上的属性集U={A, B, C, D, E},R上的函数依赖集F={A→B,DE→B,CB→E,E→A,B→D}. ...
- 四、转换成BCNF的保持无损连接的分解
转换成BCNF的保持无损连接的分解 算法1: 例3: 关系模式R<U,F>,其中U={C,T,H,R,S,G}, F={CS→G,C→T,TH→R,HR→C,HS→R},将其分解成BCNF ...
- 一个无损连接和保持函数依赖性的3nf分解
满足下列条件的函数依赖集F称为正则覆盖,记作Fc: 1)Fc 与 F 等价 2)Fc 中任何函数依赖都不含无关属性 3)Fc 中函数依赖的左半部都是唯一的 R={F,G,H,I,J},候选码是JH,F ...
- 模式分解的无损连接性之深入剖析
1.无损连接分解的形式定义 无损连接分解的形式定义如下:设R是一个关系模式,F是R上的一个函数依赖(FD)集.R分解成数据库模式δ={R1,--,Rk}.如果对R中每一个满足F的关系r都有下式成立: ...
- 转换成BCNF的无损连接分解
算法: 例1: 关系模式R<U,F>,其中U={C,T,H,R,S,G}, F={CS→G,C→T,TH→R,HR→C,HS→R},将其分解成BCNF并保持无损连接. 例2:关系模式R&l ...
- 数据库分解-含孤立属性的三范式无损连接保持依赖分解——以S-T表为例
对于不含孤立属性的对于Student表而言: {sno,sname,ssex,sage,sdept,cno,cname,cpno,Ccredit,Grade} 令A=Sno, B=Sname, C=S ...
最新文章
- ArrayList的subList方法
- [原创]VS2008 英文版转为中文版之小记
- Machine Learning week 4 quiz: Neural Networks: Representation
- QT的QScriptContext类的使用
- servlet跳转页面的几种方法
- 我的天,强化学习还能用在自动驾驶领域?
- mysql创建连接失败怎么办,MYSQL在Windows 2003上连接不上的解决方法
- OpenCV_01 简介+无版权安装+模块分析
- 关于.NET中socket中的异步套接字的研究二
- ADS仿真LC低通滤波器
- 大牛直播SDK-Windows RTMP/RTSP/本地FLV播放器使用说明
- 运动目标检测_帧差法
- iapp进度条倒计时_App Store 上的“纪念日提醒 - days matter · 倒数倒计时”
- 论文翻译:Dual-path RNN: efficient long sequence modeling for time-domain single-channel speech separatio
- java selector wakeup_java – 如何检测Selector.wakeup调用
- 新型旅游网站热地带SEO优化建议
- 2010年软件业十大新闻事件
- 基于GPT2_Chinese文本自动生成
- A survey on challenges and progresses in blockchain technologies区块链综述
- 关于身份认证中的Authenticator及AuthenticationStrategy