1范式:每个关系模式都满足1范式
2范式:1范式前提下,消除部分函数依赖,有AB->C和B->C就只保留B->C。单属性码一定是完全函数依赖
3范式:2前提向下,消除非主属性对码的函数传递依赖
BCNF:
模式分解示例:
关系的规范化就是
关系分解是通过投影实现的
函数依赖集候选码求解的具体算法在学习通上。
L属性:只出现在左手边,也就是主码的属性
R属性:只出现在右手边
LR:两边都有的
N:没出现的
以下图第3个为例
设两个集合X ={L,N},Y={LR,R}
L=:BD,R=∅
LR= AC, N = ∅
然后看有没有L决定的。这里没有,所以BD不是码
然后在Y里挑出一个被决定的属性放到L里
比如A,则对BAD而言,有A→C,因此将C添加到左边发现正好是ABCD,是全集,则BAD是一个候选码
挑选C:BCD,BCD又→A,所以也能推出全集,BCD也是一个候选码
(1)因为有B→D,所以AB→D是部分函数依赖,因此它是1范式 AB是码
(2) D是码,单属性一定是2范式,但是有D→A→B,有传递函数依赖,所以是2范式
(3)BCD,BAD都是主属性,表面上好像有传递函数依赖,传递函数依赖是对非主属性的,ABCD都是主属性,全是主属性
(4)主属性为B的情况下,有B→C,B→D,所以B→CD→A,A是非主属性,所以这是个2范式
(5)ABC是主属性,全部属性只有一条,恰好还包含了ABC,因此它的所有决定属性的因素都包含码,也就是BC范式
另一个例题
对于
(1)已知AB是主码,只有一个依赖,所以是BCNF
(2)已知码是AB,有B→D,存在非主属性对主码的部分函数依赖
(3)已知主码是BC,依然是1范式理由同上
还一个例题:
(1) 基本函数依赖F:员工(用工号表示),日期→零件 ,员工→部门(用部门名称表示),部门→经理
在这个语义下,员工和日期能确定一个唯一的元组,因此员工和日期是主码
(2)R1(工号,日期→零件数)
R2(工号→部门→经理)
R1满足3范式,R2存在传递函数依赖,2范式
将R2拆分成,R21(工号→部门),R22(工号,经理)
多值依赖
仓库保管员的例子
多值依赖和函数依赖的区别
范式等级和工程需求的对应关系