Mysql

数据库关系规范化理论

一:四个范式

  • 1NF:属性不可再分

  • 2NF:非主键属性全部依赖于主键属性(消除部分函数依赖)

  • 3NF:非主键属性之间无依赖关系(消除传递函数依赖)(如果没有非主属性至少3NF)

  • BCNF:主键属性之间无依赖关系(如果只包含两个属性)

二:模式分解的几个事实

  • 若只要求分解具有无损连接性,一定可以达到4NF

  • 只要求分解保持函数依赖,可以达到3NF,但不一定能达到BCNF

  • 若二者都有,则一定能达到3NF,不一定达到BCNF

三:候选码的判断方法

必定包含在候选码中:

  • 若有属性不在函数依赖集中出现。

  • 只在函数依赖集的左边出现。

一定不是候选码中:

  • 只出现在右边

然后对必定包含在候选码中的属性进行组合,然后求组合的闭包,闭包为所有属性的集合即为候选码

四:闭包

由一个属性直接或间接推导出来的所有属性的集合

五:求最小覆盖

  • 对依赖的右边属性进行单一化

  • 但是对于左边有两个属性的:eg:AC→B,先计算A、C的闭包,看B是否属于A或C。若属于A,不属于C则将其替换为:A→B。若都不属于,那么这个就不改变。

  • 去除多余的函数依赖关系

六:无损连接的判断

已知R<U,F>,U={A,B,C,D,E},F={A→C,B→C,C→D,DE→C,CE→A},R的一个分解为R1(AD),R2(AB),R3(BE),R4(CDE),R5(AE),判断这个分解是否具有无损连接性。

① 构造一个初始的二维表,若“属性”属于“模式”中的属性,则填aj,否则填bij

img

② 根据A→C,对上表进行处理,由于属性列A上第1、2、5行相同均为a1,所以将属性列C上的b13、b23、b53改为同一个符号b13(取行号最小值)。

img

③ 根据B→C,对上表进行处理,由于属性列B上第2、3行相同均为a2,所以将属性列C上的b13、b33改为同一个符号b13(取行号最小值)。

img

④ 根据C→D,对上表进行处理,由于属性列C上第1、2、3、5行相同均为b13,所以将属性列D上的值均改为同一个符号a4。

img

⑤ 根据DE→C,对上表进行处理,由于属性列DE上第3、4、5行相同均为a4a5,所以将属性列C上的值均改为同一个符号a3。

img

⑥ 根据CE→A,对上表进行处理,由于属性列CE上第3、4、5行相同均为a3a5,所以将属性列A上的值均改为同一个符号a1。

img

⑦ 通过上述的修改,使第三行成为a1a2a3a4a5,则算法终止。且分解具有无损连接性。

在这里插入图片描述

七.如何判断函数依赖保持(龙哥总结~~超强理论)

qq_pic_merged_1599230438055

点击查看
-------------------本文结束 感谢您的阅读-------------------