以下图片来自西安交通大学侯迪老师的ppt,仅供学习和复习使用,请勿转载或他用

4.1 数据依赖

  • 数据依赖

    • 通过关系中属性间值的相等与否体现出的数据间的相互依存和制约关系;

    • 是对现实世界中事物间相互联系的抽象,是数据的内在性质,是语义的体现。

  • 数据依赖的类型

    • 函数依赖(Functional Dependency,简记为FD)

    • 多值依赖(Multivalued Dependency,简记为MVD)

    • 连接依赖(Jion Dependency,简记为JD)

4.1.1 函数依赖

 定义4.1:设R为关系模式,r为R上的任意一个关系实例,X,Y是R的两个属性子集,若对于r上的任意两个元组t1,t2,都有:如果 t1[X]=t2[X],则必有t1[Y]=t2[Y],则称在R上X函数决定Y或者Y函数依赖于X,记为X→Y,称X为决定子或左部,称Y为被决定子或右部。

(1)平凡函数依赖

大的集合决定小的集合

(2)完全函数依赖与部分函数依赖

X->Y且X的任何一个真子集都无法决定Y,则为完全函数依赖

(3)传递函数依赖与直接函数依赖

X->Y且Y->Z,而Y不能决定X且Y对X的依赖非平凡

(4)函数依赖的逻辑蕴含

(5)函数依赖集合的闭包

由一个函数依赖集能够逻辑蕴含得到的所有的函数依赖集合

推理规则(Armstrong公理):

逻辑导出:如果F能够通过上述的三条公理推出X->Y,则F=>X->Y

(6)属性集合的闭包

求属性集闭包的算法:

即先找X的子集在左部的函数依赖,得到一个集合,然后再找这个集合的子集在左部的函数依赖,循环做下去。

(7)函数依赖集的等价覆盖

闭包相同,则等价

(8)最小函数依赖集(重点)

  1. 右部均为单属性

  2. 左部没有多余属性

  3. F中没有多余的函数依赖

求最小函数依赖集的步骤:

  1. 将右部都拆成单属性

  2. X\rightarrow Z ,其中X=X_1X_2X_3X_4...,去掉左部多余的属性,对X_1,X_2...逐一求X-X_i在F上的闭包,如果闭包中包括了Z,则去掉X_i。

    注:这里F是没有变的,本来F中若是BD->E,求BD-D的闭包时这一项并不变

  3. 消除多余函数依赖,逐一去掉每个函数依赖FDi:X\rightarrow A,然后看X在F去掉该函数依赖后的闭包,如果包括了A,则去掉该函数依赖。

注意:最小函数依赖集不一定唯一

4.1.2 多值依赖

除了函数依赖以外,关系的属性间还存在其他一些数据依赖关系,多值依赖(multivalued dependency,MVD)就是其中之一。

判定方法:对于任意关系中,如果存在两个元组(就是行),记为A,B,如果他们的某一属性X的值相等,那么我们交换它们另外的属性Y的值后,得到的新的两个元组,在表中是可以在原来的表中找到与它们相匹配的元组的。

(1)例子

a相同,交换B上的值,得到的元组依然应该在关系中。

(2)推导规则

(3)多值依赖和函数依赖的区别

4.2 关系模式分解

4.2.1 无损分解

即将分解完的多个关系重新连接起来,若和原来的关系一样则无损。

注意这里的无损不是指数据丢失,若数据增多也是有损。

例:

(1)判别算法

例题

4.2.2 保持函数依赖

 定义4.19:设ρ={ R1,…,Rk }是R的一个分解,F是R上的FD集,如果有:           ∪πRi(F)⊨ F则称分解ρ保持函数依赖集F。 

例题

说明:

计算D_G^+时,按照算法,首先{D}U({D}∩{A,B})​的闭包∩{A,B}),不变,BC类似,也不变,然后CD时C的闭包为ABCD,∩{C,D}得CD,然后从D∪{C,D}={C,D}开始继续算,最后得到D_G^+。

4.3 关系模式规范化(重点)

重点:判断+分解(3NF或BCNF)

4.3.1 第一范式1NF

4.3.2 求候选键

候选键:能唯一标识一个元组且去掉候选键中的任何属性便不能唯一标识。

4.3.3 第二范式2NF

4.3.4 第三范式3NF

存在非主属性决定非主属性的情况

如果只有一个非主属性,则必然满足。

4.3.5 BCNF

即消除了主属性对候选键的部分依赖和传递依赖

即对于任何非平凡的函数依赖,左部都包含候选键

如果没有非主属性,则必然是3NF,但未必是BCNF。

4.3.6 第四范式

4.3.7 判断范式级别例题

4.3.8 规范化算法

(1)分解为BCNF

举例:

使用分解树,每次先检查是否满足BCNF(左部是否都为键),如果不满足,找到一个不满足的函数依赖F:X->A,将XA分出来变成一个关系模式,然后从属性集合中删掉A,继续如此,得到一个分解树。

(2)分解为3NF

举例:

  1. 先得到最小依赖集,然后按照左部相同进行分组,不同的组变成不同的关系模式,若有包含关系,则可去掉。

  2. 然后再求出R的键,如果已经包含在一个关系模式中,则不需要并入,如果没有,则成为一个单独的关系模式并入。

4.3.9 基于MVD的规范化

总结

第4章 关系数据理论相关推荐

  1. 第6章 关系数据理论—范式的介绍

    第6章 关系数据理论-范式的介绍 本文全部内容来自数据库系统概论(第5版)-王珊.萨师煊著 部分函数依赖图,出于自己的理解,如有错误,请大家评论指正! 范式:关系数据库中需要满足的一定要求的规范形式. ...

  2. 《数据库系统概论》第六章 关系数据理论

    第六章 关系数据理论 1.函数依赖的定义:设R(U)是属性集U上的关系模式,X,Y是U的子集,且对于R(U)上任意一个可能的关系r,r中不存在两个不同的Y对应于相同的X的情况,则称Y函数依赖于X,记作 ...

  3. 第6章 关系数据理论—多值依赖和4NF

    第6章 关系数据理论-多值依赖和4NF 本篇文章全部内容来自数据库系统概论第五版-王珊.萨师煊著. 这是对自己学习的总结,如有错误,请大家指正,一起进步! 1.多值依赖 例:学校某一门课程由多个教授讲 ...

  4. (数据库系统概论|王珊)第六章关系数据理论-第一节:为什么要研究关系数据理论

    文章目录 一:概念回顾:关系模式 二:数据依赖 三:一个例子:不遵循关系数据理论导致的问题 一句话,研究关系数据库理论就是为了设计出合适的关系模式,也即合适.高效的表 一:概念回顾:关系模式 相关文章 ...

  5. 第6章 关系数据理论 习题6

    (一)大家根据自己了解的.所使用的.所设计的数据库系统,举例说明以下术语的定义(可查阅相关材料),要求理解并熟练掌握. 1.函数依赖 设R(U)是一个属性集U上的关系模式,X和Y是U的子集.若对于R( ...

  6. 数据库系统概论--第六章 关系数据理论

    问题的提出 一个关系模式应该是一个五元组:R(U,D,DOM,F) 这里: 关系名R是符号化 的元组语义. U为一组属性. D为属性组U中华的属性所来自的域. DOM为属性到域的映射. F为属性组U上 ...

  7. 数据库复试--关系数据理论(主观题)

    第五章 关系数据理论 1. 在关系模式R(D,E,G)中,存在函数依赖关系{E→D,(D,G)→E},则候选码是__________,关系模式R(D,E,G)属于____________. 正确答案: ...

  8. 【数据库原理及应用】经典题库附答案(14章全)——第五章:关系数据理论

    [数据库原理及应用]经典题库附答案(14章全)--第一章:数据库基础知识 [数据库原理及应用]经典题库附答案(14章全)--第二章:关系数据库知识 [数据库原理及应用]经典题库附答案(14章全)--第 ...

  9. 数据库系统概论第六章(关系数据理论)知识点总结(2)—— 码的概念总结

    本专栏收录了数据库的知识点,而从本文起,将讲述有关于关系数据理论中的第一范式.第二范式.第三范式以及BC范式有关知识点,提供给有需要的小伙伴进行学习,本专栏地址可以戳下面链接查看

最新文章

  1. 链路 英文_光纤链路基础
  2. TACACS 协议简介与开发总结
  3. CListCtrl::InsertColumn()和InsertItem()和SetItemText()
  4. JEECG支付服务窗专题 - 平台与服务窗接口对接
  5. 连续自然数和(洛谷-P1147)
  6. php 字符 index,php函数之字符串篇String
  7. express在本地起一个简单服务器可能会用到的(本文用的uniapp做例子)
  8. DateUtils 工具类
  9. windirstat怎么用_使用WinDirStat分析和管理硬盘空间
  10. windows U盘分区方法
  11. .NET 高级架构师0003 架构师之路(2)---架构师的职责
  12. dva脚手架创建的项目目录结构分析
  13. 畅购商城(三):商品管理
  14. AppScan安全扫描工具-IBM Security App Scan Standard
  15. Matlab画混淆矩阵(多分类)
  16. 出师未捷先被封!三款APP宣战微信 来一个封一个?
  17. 一个网站广告位的极致使用
  18. 管理2.0 (3):从粗放到精细化的企业管理升级路
  19. 老板太会做生意,只做了一件事,就让这家刚开业的餐厅人气暴涨
  20. 个人官网导航主页API网站源码

热门文章

  1. python/appium实现华为应用商城app界面上下滑动打开关闭通知栏等功能
  2. untiy virtual reality supported勾选
  3. Java之List系列--ArrayList保证线程安全的方法
  4. Pandas入门超详细教程,看了超简单
  5. 企业IT资产年终盘点实录——踩过的坑如月球表面
  6. docker | 基于 WSL2 在 Windows 下使用 docker
  7. 码绘:使用p5.js进行简单的作画
  8. 微信小程序3天刷量开流量主
  9. Redis学习笔记·
  10. 企业级项目实战讲解!我凭借这份PDF的复习思路,薪资翻倍