教材:数据库系统概念第八章
概念梳理
函数依赖的定义
超码的定义(K的任意子集都无法决定R)
平凡函数依赖
闭包
BCNF范式条件
非BCNF向BCNF转化(这两个步骤分解出来的关系可能还不是BCNF范式,继续分解, 直到结束)
BCNF分解至此,仍有缺点,缺点是无法保持依赖,详见P187例子,考虑比BCNF弱的范式,允许保持依赖
第三范式
注意,只满足条件三是ok的,且条件三的结果属于任意一个候选码即可,记住候选码的定义:任何真子集都不是超码的超码
在此,保持依赖。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
构建闭包
使用以下6个公理构建F+
属性集闭包的三种用途
总结(by TSH)
正则覆盖
先明白无关属性的定义,举例(by TSH)
理解:也即,所有依赖的左边不相等和Fc中不含有多余属性的依赖。
正则覆盖举个栗子
初始:A->BC, B->C, A->B, AB->C
1. 去左边重复:A->BC,B->C,AB->C
2. 去左多余: A->BC,B->C,A->C
3. 去右多余:A->B,B->C,A->C
4. 传递律:A->B,B->C
无损分解
判定无损分解
判定保持依赖
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
重点,分解算法
BCNF分解
BCNF的判定方法(之前是函数依赖判定,现在是属性闭包),注意,这是分解前:
一定要区分,分解后的检查方法:
总结by TSH:
3NF分解:
简而言之,a->b, 要么a是超码,要么b是某个候选键的属性。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
多值依赖
(3NF:不允许有非主键列A依赖非主键列B,B依赖于主键列A,即不准依赖再依赖)
(BCNF: 不允许非主键列依赖于非超码)
4NF的引入
名词区分:函数依赖有时称为相等产生依赖,而多值依赖称为元组产生依赖。
多值依赖的判定
其中,平凡的多值依赖:
多值依赖的结论:
4NF的条件
4NF的分解:类似于BCNF