构成键码(或候选码)的属性称为主属性,而其它属性称为非主属性
1. 函数依赖定义
设:R(U)是属性集U 上的关系模式,X,Y⊆U。如果对于R(U)的任意一个关系r,以及r 的任意两个元组t1,t2,不存在:t1[x]=t2[x],而t1[Y]≠t2[Y],则称X函数决定Y,或者说Y函数依赖于X。记为:X→Y。
1)“X→Y”必须对R(U)的任何一个关系实例都成立。
2)若X→Y, Y→X,则记作X←→Y。若Y不函数依赖X,则记作X Y 。
3)函数依赖是现实世界数据关联的表现形式。
2. 完全函数依赖与部分函数依赖
1) 定义完全函数依赖:在R(U)中,如果X→Y,且对X的任何一个真子集X’,都有X’ Y,则称Y对X完全函数依赖,记作: )
2)定义部份函数依赖:在R(U)中,如果X→Y, 但Y不完全函数依赖X,则称Y对X部份函数依赖,记作 。
3. 传递函数依赖定义:
在R(U)中,如果X→Y,Y X ( Y ⊆ X),Y→Z,则称Z传递函数依赖于X,记为X t Z 。
4. 数据库中的范式:
关系数据库的任意一个关系,需要满足一定的数据依赖约束。满足不同程度数据依赖约束的关系,称为不同范式的关系。
第一范式:
关系模式的各属性域是“原子”的
第二范式:
设R 是一个关系模式。若R∈1NF,且每一个非主属性完全函数依赖于码,则R∈2NF
第三范式:
如果关系模式R(U,F)是2NF的,且不存在键码X、属性组Y以及非主属性Z ,使得X→Y ,Y→Z 成立,则R∈3NF,换句话说就是若R∈3NF,则R中不存在非主属性对码的传递函数依赖。
BCNF:
关系模式R∈1NF。如果对于R的每一个函数依赖X→Y(Y ⊆ X),X都含有键码(即X是超码),那么R∈BCNF。
第四范式:
设关系模式R ∈1NF。若对于R的每个非平凡多值依赖X→→Y(Y ⊆ X),X都含有键码,则R ∈4NF
5. 几个问题的总结:
a) 第二范式与BCNF的区别:
第二范式只要求非主属性对码的完全依赖,而BCNF还要求主属性对不包 含它的键码的完全依赖。
b) 第三范式与BCNF的区别:
第三范式没有像BCNF那么严格,它只要求主属性对不包含它的键码的部 分依赖。
c) 第三范式的定义(来自《数据库系统基础教程》)是若在关系R中存在非平凡的FD 且要么是{}是超键,要么B属于某个键,怎么能推出R中不存在非主属性对码的传递函数依赖?
首先键码不能决定键码,由定义可以看出,当B是非主属性,一定由其中一个键码决定,所以不会有对码的传递依赖。
6. 规范化目的:
减小关系模式因规范化程度过低带来的数据冗余,克服修改、删除的异常,
“模式分解”是规范化的实现途径,但数据库设计实践中不能过分追求规范化程度