文章目录
为什么引⼊范式?
1数据冗余
2更新异常
3插⼊异常
4删除异常
范式分类
设计关系数据库时,遵从不同的规范要求,这些不同的规范要求被称为不同的范式, 各种范式呈递次规范,越⾼的范式数据库冗余越⼩。
⽬前关系数据库有六种范式:
第⼀范式(1NF)、第⼆范式(2NF)、第三范式(3NF)、 巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,⼜称完美范式)
。
⼀般来说,数据库只需满⾜第三范式(3NF)就⾏了。
1.非平凡依赖+平凡依赖
2.完全函数依赖+部分函数依赖
3.求关系模式候选码的方法
3.0 补充:求闭包
参考博客:https://wonzwang.blog.csdn.net/article/details/80464466
候选码的概念: 可以推出所有属性
如何选出候选码?
- 只出现在左边的⼀定是候选码
- 只出现在右边的⼀定不是候选码
- 左右都出现的不⼀定
左右都不出现的⼀定是候选码
- 再求确定的候选码的闭包,如果可以推出全部,那么当前确定的就是候选码,否则就不是
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)属于第几范式?
解答:
- 确定R(U,F)的候选码(3.2 例题已解决)。
三个候选码:ABD、BDC、BDE。 - 属性集U分成两个集合:
码属性集:ABCDE
非码属性集:G - 根据范式定义判断
显然,只有一个非主属性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.求最小函数的依赖集
如何求最⼩依赖集?
拆右边为多个元素的
⽐如A->BC 拆为 A->B 和A->C除去一个依赖 temp(从左往右)
【设:temp的左边取名为t1,右边为t2】,求 t1 的闭包,看“ (t1)+ ”能不能推出“t2”,
若能,该依赖就去掉,否则保留。循环执行
(即每一个依赖都要这样做)左边最小化
,比如:
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解答----参考博客:求模式分解