关系数据理论与模式求精
函数依赖

非平凡函数依赖

- 平凡函数依赖:
(职工号,性别)→职工号
(职工号,性别)→性别 - 非平凡函数依赖
(职工号,姓名)→性别
//虽然在这里由决定因素中所含的职工号单属性就能够函数决定性别,而带有的姓名属性有些多余.
完全和部分函数依赖

传递函数依赖

student是a
classNo是b
{classname,instutute}是c
student->classNo
student->{classname,instutute}
classNo->{classname,instutute}
即a->b
a->c
b->c
b不能->a 所以满足传递依赖
范式

第一范式
每一列都不可分

第二范式
不存在非主属性对码的部分属性依赖

第三范式
不存在非主属性对码的传递函数依赖

第一二三范式的例子分析




BCNF
- 所有非主属性都完全函数依赖于每个候选码;
- 所有主属性都完全函数依赖于每个不包含它的候选码;
- 没有任何属性完全函数依赖于非候选码的任何一组属性。
起决定作用的属性必须是超码!

r( R)=r(A, B, C), F={A→B, B→C}, 候选码为A
可分解为:
r1(R1)=r1(A, B), r2(R2) =r2(B, C) (F1={A→B}、 F2={B→C})
或 r1(R1)=r1(A, B), r2(R2) =r2(A, C) (F1={A→B}、 F2={A→C})
显然,这两种分解得到的r1(R1)和r2(R2)都属于BCNF范式,且都是无损分解(分解后的公共属性是一个关系的候选码)。
但是,后一种分解不是保持依赖分解
因此,满足BCNF范式的模式分解,可能不是保持依赖分解。
比较3NF与BCNF
- BCNF比3NF严格。
BCNF要求所有的非平凡函数依赖a→b中的a是超码,而3NF则放松了该约束,允许a不是超码。
若关系模式属于BCNF范式就一定属于3NF范式。反之则不一定成立。 - 3NF存在数据冗余和异常问题,而BCNF是基于函数依赖理论能够达到的最好关系模式。
- BCNF范式分解是无损分解,但不一定是保持依赖分解; 而3NF分解既是无损分解,又是保持依赖分解。
函数依赖理论
函数依赖集闭包
计算闭包F+


属性集闭包
定义

例子

计算属性集闭包的作用

如何找出所有的候选码
方法一:
- L:{左边出现的属性}
- R:{右边出现的属性}
- LR:{ 左右边都出现过的属性 }
- N:{依赖关系中都没有出现过}
候选码 = L并上N
如果这时候算(候选码+)为R的话 说明这个候选码是唯一候选码
方法二:
先找出只在函数依赖的左边出现的属性 算出其闭包 如果等于R的话 就说明其为该关系模式的唯一候选码
例题



无损连接分解

保持依赖分解

模式分解算法
BCNF分解
3NF分解
数据库模式求精



总结
-
函数依赖定义(重点)
非平凡、部分(完全)、传递 -
范式(重点前三)
1NF、2NF、3NF、BCNF -
函数依赖集闭包(重点),Armstrong公理(理解)。
-
函数依赖集F下属性集A的闭包(重点)
验证α→β是否在F+中;计算F+。
判断α是否为r®的超码、候选码 ——候选码的计算方法。 -
无损连接分解:R1∩R2是关系 r1(R1)或 r2(R2)的超码(理解)。
-
保持依赖分解: (F1∪F2∪…∪Fn)+=F+。
-
BCNF:F+中非平凡函数依赖的决定属性集都包含候选码.
不存在任何属性(包括主属性和非主属性)对候选码的部分依赖和传递依赖,以及主属性之间的传递依赖。
模式分解:是无损连接分解,可能不是保持依赖分解。 -
3NF:允许存在主属性对候选码的传递依赖和部分依赖。
模式分解:是无损连接分解,且是保持依赖分解。 -
模式分解算法
BCNF分解; -
模式求精
确定函数依赖;
确定关系模式所属范式;
分析是否满足应用需求;
模式分解;
模式合并。
1284



被折叠的 条评论
为什么被折叠?



