当前位置: 首页 > news >正文

database_无损联接分解

本文出自李骥平博客,请务必保留此出处

http://fsjoy.blog.51cto.com/318484/137130

 

定义:无损联接分解是将一个关系模式分解成若干个关系模式后,通过自然联接和投影等运算仍能还原到原来的关系模式,则称这种分解为无损联接分解。

  

1关系模式:成绩(学号,姓名,课程号,课程名,分数)

函数依赖:学号->姓名,课程号->课程名, (学号,课程号)->分数

若将其分解为下面三个关系模式:

 

成绩(学号,课程号,分数)

学生(学号,姓名)

课程(课程号,课程名)

问,这样的分解是无损分解么?

----

由于:学号->姓名,所以:

成绩(学号,课程号,分数,姓名

由于:课程号->课程名,所以:

成绩(学号,课程号,分数,姓名,课程名

 

所以这个例子是无损分解

 

2R=ABCDE, R1=AD,R2=BC,R3=BE,R4=CDE, R5=AE, 设函数依赖:

A->C, B->C, C->D, DE->C, CE->A. 判断R分解成

 

ρ={R1,  R2,  R3,  R4,  R5}是否无损联接分解?

 

解:

这样的题要通过画表的方法来解,首先,原始表:

 

 

A

B

C

D

E

AD

a1

b12

b13

a4

b15

BC

b21

a2

a3

b24

b25

BE

b31

a2

b33

b34

a5

CDE

b41

b42

a3

a4

a5

AE

a1

b52

b53

b54

a5

1

(A B C D E是关系R的属性, AD, BC, BE, CDE, AE 是分解之后每一个关系对应的属性集)

 

填表的过程:

当横竖相交的时候,如果在分解关系中存在对应列的单个的属性(譬如第一列第一行ADA相交的单元格,AD含有A,就填写a1),则填写a下标 下标就是单元格对应所在的列号。否则填写b下标 下标是单元格对应所在的行列号。

填写之后的初始表就是表1所示

2.根据依赖关系修改原始表:

对于依赖关系A->C,看A列中有两行a1是相等的(第一行和第五行),所以在C列中对应的两行也应该相等,但是看到这两行都是bb13b53),所以将这个b都换成b13(上面的较小的标)

 

 

A

B

C

D

E

AD

a1

b12

b13

a4

b15

BC

b21

a2

a3

b24

b25

BE

b31

a2

b33

b34

a5

CDE

b41

b42

a3

a4

a5

AE

a1

b52

b53àb13

b54

a5

对于依赖BàC, 同样的道理,看B这一列中,第二行和第三行都是a2,那么对C这一列同样的操作,但是看到C这一列中第二行是a3,那么就将第三行改成a3,优先级比b要高。

 

A

B

C

D

E

AD

a1

b12

b13

a4

b15

BC

b21

a2

a3

b24

b25

BE

b31

a2

b33àa3

b34

a5

CDE

b41

b42

a3

a4

a5

AE

a1

b52

b13

b54

a5

 

对依赖CàDC列的15行相等,D15行也应该相等,D的第1行有a,所以b54换成a4;另外C列的234行也相等,D234行也应该相等,D的第4行有a,所以将对应的行都换成a4

 

A

B

C

D

E

AD

a1

b12

b13

a4

b15

BC

b21

a2

a3

b24àa4

b25

BE

b31

a2

a3

b34àa4

a5

CDE

b41

b42

a3

a4

a5

AE

a1

b52

b13

b54àa4

a5

 

 

对于DEàC, DE公共的相等的行是345行,对应C345行也应该相等,故将C列的两个的b13换成a3,所以表格经过这个函数依赖关系,就是:

 

A

B

C

D

E

AD

a1

b12

b13àa3

a4

b15

BC

b21

a2

a3

a4

b25

BE

b31

a2

a3

a4

a5

CDE

b41

b42

a3

a4

a5

AE

a1

b52

b13àa3

a4

a5

 

 

对于CEàA, CE的公共行是345行,所以将A345行也对应相等,因为A列的第五行含有a1,所以将34行的b31,b41都换成a1

 clip_image001

最终得到的表格就是:

 

clip_image002

 最后,我们从表格里看到对于DE行来说,都是a,所以得出结论,题中的分解是无损联接分解

 

********************

 

无损分解的一个简便的判别方法(适用于分解成2个关系的情况)

 

譬如:

有关系R=ABC, 依赖关系{A-->B}那么下面哪个是无损分解:

 

A. {R1(AB),R2(AC)}

B.{R1(AB),R3(BC)}

 

首先看选项AR1R2=AR1-R2=BR1U R2-->(R1-R2).所以它是无损分解

选项B R1R2=B, R1-R2=A, R2-R1=C,

所以它不是无损分解

 

那么这里快速判断无损分解的方法就是

对两个集合先求集合的,然后求集合的差(2个集合有两个差的结果)

如果集合的-->集合的差(得到差结果的任意一个)成立那么就是无损分解

本文出自李骥平博客,请务必保留此出处http://fsjoy.blog.51cto.com/318484/137130

本文出自 51CTO.COM技术博客

 

 

 

转载于:https://www.cnblogs.com/xyjcn/archive/2010/07/01/1769517.html

相关文章:

  • switch case重构事例[转]
  • Binary Tree Traversals(二叉树)
  • As far as i am concerned......
  • WinCE中文字库占了这么多空间?
  • 《Web 标准和SEO应用实践 》-使用免费的搜索系统
  • 【老孙随笔】关羽和吕蒙——天才的失败
  • 达内-----选择循环结构与数组
  • 验证码图片生成代码
  • 第十二章 管理存储过程
  • 数据之美(十一):30 套 Infographics 作品欣赏
  • jbpm4.3整合web工程时异常解决方案
  • JQERY limittext 插件0.2版
  • 家族企业传承问题研究
  • [2010-8-30]
  • jquery js 下载|jquery-1.4.2 下载|jquery最新版本下载
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 03Go 类型总结
  • 0x05 Python数据分析,Anaconda八斩刀
  • CSS3 变换
  • Cumulo 的 ClojureScript 模块已经成型
  • flutter的key在widget list的作用以及必要性
  • iOS 系统授权开发
  • Linux中的硬链接与软链接
  • PAT A1092
  • Redis学习笔记 - pipline(流水线、管道)
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • 阿里云购买磁盘后挂载
  • 初探 Vue 生命周期和钩子函数
  • 从零搭建Koa2 Server
  • 回顾2016
  • 区块链共识机制优缺点对比都是什么
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 优化 Vue 项目编译文件大小
  • 与 ConTeXt MkIV 官方文档的接驳
  • 正则表达式
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • #13 yum、编译安装与sed命令的使用
  • #if #elif #endif
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • (26)4.7 字符函数和字符串函数
  • (C)一些题4
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (pytorch进阶之路)扩散概率模型
  • (SpringBoot)第七章:SpringBoot日志文件
  • (二)丶RabbitMQ的六大核心
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (小白学Java)Java简介和基本配置
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (转) 深度模型优化性能 调参
  • *setTimeout实现text输入在用户停顿时才调用事件!*