热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

database_无损联接分解

本文出自“李骥平”博客,请务必保留此出处http:fsjoy.blog.51cto.com318484137130定义:无损联接分解是将一个关系模式分解


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



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




 


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



  



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



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



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



 



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



学生(学号,姓名)



课程(课程号,课程名)



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



----



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



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



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



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



 



所以这个例子是无损分解



 



2:R=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列中对应的两行也应该相等,但是看到这两行都是b(b13,b53),所以将这个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àD,C列的1,5行相等,D1,5行也应该相等,D的第1行有a,所以b54换成a4;另外C列的2,3,4行也相等,D2,3,4行也应该相等,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公共的相等的行是3,4,5行,对应C3,4,5行也应该相等,故将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的公共行是3,4,5行,所以将A3,4,5行也对应相等,因为A列的第五行含有a1,所以将3,4行的b31,b41都换成a1



 clip_image001



最终得到的表格就是:



 



clip_image002



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



 



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



 



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



 



譬如:



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



 



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



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



 



首先看选项A,R1R2=A,R1-R2=B,R1U 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



推荐阅读
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文详细介绍了MySQL表分区的创建、增加和删除方法,包括查看分区数据量和全库数据量的方法。欢迎大家阅读并给予点评。 ... [详细]
  • 本文介绍了一些Java开发项目管理工具及其配置教程,包括团队协同工具worktil,版本管理工具GitLab,自动化构建工具Jenkins,项目管理工具Maven和Maven私服Nexus,以及Mybatis的安装和代码自动生成工具。提供了相关链接供读者参考。 ... [详细]
  • IT方面的论坛太多了,有综合,有专业,有行业,在各个论坛里混了几年,体会颇深,以前是论坛哪里人多 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • REVERT权限切换的操作步骤和注意事项
    本文介绍了在SQL Server中进行REVERT权限切换的操作步骤和注意事项。首先登录到SQL Server,其中包括一个具有很小权限的普通用户和一个系统管理员角色中的成员。然后通过添加Windows登录到SQL Server,并将其添加到AdventureWorks数据库中的用户列表中。最后通过REVERT命令切换权限。在操作过程中需要注意的是,确保登录名和数据库名的正确性,并遵循安全措施,以防止权限泄露和数据损坏。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Windows2003 IIS上设置301定向,实现不带www域名跳转带www域名的方法
    打开IIS,建一个网站,主机头用不带www的域名,随便指向一个目录。然后在这个网站上点右键,属性--主目录--重定向到URL如图ÿ ... [详细]
  • Postgresql备份和恢复的方法及命令行操作步骤
    本文介绍了使用Postgresql进行备份和恢复的方法及命令行操作步骤。通过使用pg_dump命令进行备份,pg_restore命令进行恢复,并设置-h localhost选项,可以完成数据的备份和恢复操作。此外,本文还提供了参考链接以获取更多详细信息。 ... [详细]
author-avatar
青春快乐1
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有