一、判别一个分解的无损连接性

方法一:无损连接定理

关系模式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且同时保持无损连接与函数依赖的分解

综合题:

无损连接和模式分解题型相关推荐

  1. 【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)

    关系数据理论 6.1 为什么要学习关系数据理论 什么是好的数据库逻辑设计 什么是数据依赖 关系模式的简化表示 6.2 规范化 - 关系的规范化理论 6.2.1 函数依赖 1.函数依赖 2.平凡函数依赖 ...

  2. 判断模式分解是否为无损连接的方法

    判断模式分解是否为无损连接的方法 [方法步骤] ρ = { R1<U1 , F1> , R2<U2 , F2> , - , Rk<Uk , Fk> } 是关系模式 ...

  3. 数据库中的模式分解与无损连接性

    无损连接分解的普通判别方法--表格法 设关系模式R=A1,-,An,R上成立的FD集F,R的一个分解p={R1,-,Rk}.无损连接分解的判断步骤如下: (1)构造一张k行n列的表格,每列对应一个属性 ...

  4. 关系模式判断候候选关键字 与 函数依赖无损连接

    关系模式判断候候选关键字 与 函数依赖无损连接 例题:设关系模式R(U, F),其中R上的属性集U={A, B, C, D, E},R上的函数依赖集F={A→B,DE→B,CB→E,E→A,B→D}. ...

  5. 四、转换成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 ...

  6. 一个无损连接和保持函数依赖性的3nf分解

    满足下列条件的函数依赖集F称为正则覆盖,记作Fc: 1)Fc 与 F 等价 2)Fc 中任何函数依赖都不含无关属性 3)Fc 中函数依赖的左半部都是唯一的 R={F,G,H,I,J},候选码是JH,F ...

  7. 模式分解的无损连接性之深入剖析

    1.无损连接分解的形式定义 无损连接分解的形式定义如下:设R是一个关系模式,F是R上的一个函数依赖(FD)集.R分解成数据库模式δ={R1,--,Rk}.如果对R中每一个满足F的关系r都有下式成立: ...

  8. 转换成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 ...

  9. 数据库分解-含孤立属性的三范式无损连接保持依赖分解——以S-T表为例

    对于不含孤立属性的对于Student表而言: {sno,sname,ssex,sage,sdept,cno,cname,cpno,Ccredit,Grade} 令A=Sno, B=Sname, C=S ...

最新文章

  1. ArrayList的subList方法
  2. [原创]VS2008 英文版转为中文版之小记
  3. Machine Learning week 4 quiz: Neural Networks: Representation
  4. QT的QScriptContext类的使用
  5. servlet跳转页面的几种方法
  6. 我的天,强化学习还能用在自动驾驶领域?
  7. mysql创建连接失败怎么办,MYSQL在Windows 2003上连接不上的解决方法
  8. OpenCV_01 简介+无版权安装+模块分析
  9. 关于.NET中socket中的异步套接字的研究二
  10. ADS仿真LC低通滤波器
  11. 大牛直播SDK-Windows RTMP/RTSP/本地FLV播放器使用说明
  12. 运动目标检测_帧差法
  13. iapp进度条倒计时_‎App Store 上的“纪念日提醒 - days matter · 倒数倒计时”
  14. 论文翻译:Dual-path RNN: efficient long sequence modeling for time-domain single-channel speech separatio
  15. java selector wakeup_java – 如何检测Selector.wakeup调用
  16. 新型旅游网站热地带SEO优化建议
  17. 2010年软件业十大新闻事件
  18. 基于GPT2_Chinese文本自动生成
  19. A survey on challenges and progresses in blockchain technologies区块链综述
  20. 关于身份认证中的Authenticator及AuthenticationStrategy

热门文章

  1. 时间的表示格式,精确到毫秒
  2. 【Fluent Meshing】04:计算域提取
  3. freeline集成
  4. poco mysql 安装,poco linux安装
  5. layer 上传图片点击取消仍在加载_上传图片到smms图床(整合layer上传插件) by:小灰灰 | 小灰灰博客...
  6. python签到教程_Python实现自动签到脚本功能
  7. bootstra查阅参考文档
  8. 如何加速网页的打开速度?
  9. 视频会议系统的主流解决方案与技术趋势
  10. 浙江省计算机二级理论知识,最新浙江省计算机二级高级办公软件考试范围