热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

数据库系统概论第六章:关系数据理论(依赖、候选码、第几范式、最小依赖集、模式的分解)

文章目录1.非平凡依赖平凡依赖2.完全函数依赖部分函数依赖3.求关系模式候选码的方法3.0补充:求闭包3.1具体解题步骤(看这个,绝对有用

文章目录

    • 1.非平凡依赖+平凡依赖
    • 2.完全函数依赖+部分函数依赖
    • 3.求关系模式候选码的方法
      • 3.0 补充:求闭包
      • 3.1 具体解题步骤(看这个,绝对有用 )
      • 3.2 例: R(U)=(ABCDEG),F={AB->C,CD->E,E->A,A->G},求候选码。(根据3.1)
      • 3.x 补充:超码、候选码、主码、主属性、非主属性、全码的区别
    • 4.判断关系模式属于第几范式的方法
      • 4.0 求范式(看这个,绝对有用 )
      • 4.1例题
      • 4.2 补充:1NF、2NF、3NF、BCNF
        • 4.2.1 第一范式:1NF
        • 4.2.2 第二范式:2NF
        • 4.2.3 第三范式:3NF
        • 4.2.4 BCNF范式
    • 5.公理系统(就是里面的结论直接用)
    • 6.求最小函数的依赖集
      • 6.1 例题1 (就按这个来解题)
      • 6.2 例题2
    • 7. 模式的分解
      • 7.1 白话理解
      • 7.2判断是否为 : 无损连接分解 / 保持函数依赖
      • 7.3 U=(A,B,C,D,E,G) F={BG->C,BD->E,DG->C,ADG->BC,AG->B,B->D} 若R不是3NF,将R分解为无损且保持函数依赖的3NF。
      • 7.4 U=(A,B,C,D,E) F={AB->C,C->B,D->E,D->C} 若R不是3NF,将R分解为无损且保持函数依赖的3NF。

为什么引⼊范式?

1数据冗余
2更新异常
3插⼊异常
4删除异常

范式分类

设计关系数据库时,遵从不同的规范要求,这些不同的规范要求被称为不同的范式, 各种范式呈递次规范,越⾼的范式数据库冗余越⼩。
 
⽬前关系数据库有六种范式:
第⼀范式(1NF)、第⼆范式(2NF)、第三范式(3NF)、 巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,⼜称完美范式)
 
⼀般来说,数据库只需满⾜第三范式(3NF)就⾏了。


1.非平凡依赖+平凡依赖


在这里插入图片描述
在这里插入图片描述


2.完全函数依赖+部分函数依赖

在这里插入图片描述

3.求关系模式候选码的方法


3.0 补充:求闭包


参考博客:https://wonzwang.blog.csdn.net/article/details/80464466



候选码的概念: 可以推出所有属性

如何选出候选码?

  1. 只出现在左边的⼀定是候选码
  2. 只出现在右边的⼀定不是候选码
  3. 左右都出现的不⼀定
  4. 左右都不出现的⼀定是候选码
  5. 再求确定的候选码的闭包,如果可以推出全部,那么当前确定的就是候选码,否则就不是




3.1 具体解题步骤(看这个,绝对有用 )


参考博客:求候选键/候选码



3.2 例: R(U)=(ABCDEG),F={AB->C,CD->E,E->A,A->G},求候选码。(根据3.1)

解答:

在这里插入图片描述
故候选码为ABD、BCD、BDE


3.x 补充:超码、候选码、主码、主属性、非主属性、全码的区别

以3.2的例题为例

超码: 能表示出所有属性的集合, ⽐如 (ABD),(BDC),(BDE) BDCA BDEA ABCDE
候选码:是最⼩的超码
主码: 从候选码⾥⾯任意跳出⼀个 作为主码
主属性: 包含在所有候选码的属性 ⽐如ABCDE
⾮主属性: 不包含在候选码中的属性 ,上题为G
全码: 所有的属性都是主码












4.判断关系模式属于第几范式的方法


4.0 求范式(看这个,绝对有用 )


参考博客:求范式


4.1例题

R(U)=(ABCDEG),F={AB->C,CD->E,E->A,A->G},判断关系模式R(U,F)属于第几范式?
解答:

  1. 确定R(U,F)的候选码(3.2 例题已解决)。
    三个候选码:ABD、BDC、BDE。
  2. 属性集U分成两个集合:
    码属性集:ABCDE
    非码属性集:G
  3. 根据范式定义判断

在这里插入图片描述
在这里插入图片描述
显然,只有一个非主属性G,A->G,G部分依赖于候选码,所以,R(U,F)属于1NF。


4.2 补充:1NF、2NF、3NF、BCNF


在这里插入图片描述
在这里插入图片描述


4.2.1 第一范式:1NF


在这里插入图片描述
在这里插入图片描述


4.2.2 第二范式:2NF


在这里插入图片描述
将关系S-L-C规范化,使其满足2NF。
解决方法:将S-L-C分解为两个关系模式,以消除这些部分函数依赖。
在这里插入图片描述


另一个例子:在这里插入图片描述
在这里插入图片描述


4.2.3 第三范式:3NF


在这里插入图片描述
例子(消除传递函数依赖):
在这里插入图片描述
在这里插入图片描述


4.2.4 BCNF范式


在这里插入图片描述


5.公理系统(就是里面的结论直接用)


在这里插入图片描述
自反性:可根据平凡函数依赖来理解












6.求最小函数的依赖集


在这里插入图片描述
如何求最⼩依赖集?

  1. 拆右边为多个元素的 ⽐如A->BC 拆为 A->B 和A->C
  2. 除去一个依赖 temp(从左往右) 【设:temp的左边取名为t1,右边为t2】,求 t1 的闭包,看“ (t1)+ ”能不能推出“t2”,
    若能,该依赖就去掉,否则保留。循环执行(即每一个依赖都要这样做)
  3. 左边最小化,比如:
    在这里插入图片描述


6.1 例题1 (就按这个来解题)


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最终的F即最小函数的依赖集


6.2 例题2


参考博客:求最小依赖集








7. 模式的分解


7.1 白话理解


在这里插入图片描述


7.2判断是否为 : 无损连接分解 / 保持函数依赖

无损连接分解(方法一:判定表法)

参考博客:判断是否为无损连接分解

无损连接分解(方法二:无损连接定理)+ 保持函数依赖的证明

参考博客:判断是否为无损连接,保持函数依赖
在这里插入图片描述


7.3 U=(A,B,C,D,E,G) F={BG->C,BD->E,DG->C,ADG->BC,AG->B,B->D} 若R不是3NF,将R分解为无损且保持函数依赖的3NF。


7.4 U=(A,B,C,D,E) F={AB->C,C->B,D->E,D->C} 若R不是3NF,将R分解为无损且保持函数依赖的3NF。


7.3和7.4解答----参考博客:求模式分解


推荐阅读
author-avatar
燕灬子78
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有