一个低一级范式的关系模式通过模式分解可以转换成若干个高一级范式的关系集合,这种过程就叫规范化。
关系数据库中的关系是要满足一定要求的,满足不同程度要求的位不同范式。
定义:在关系 R(U) 中, 若 X→Y,且对于 X 的任何真子集 X‘ 都有 X’ ? Y,则称 Y 完全函数依赖于 X,记为:X-f->Y 。否则称 Y函数部分依赖于 X,记为 X-p->Y 。
完全函数依赖就是说 属性组 X 的所有属性一起(即完全)才能决定属性 Y,去掉任何一个属性都不行。相反的,部分函数依赖就是说 属性组 X 中的 部分属性就可以决定 Y ,用不着全部。
更简单一点来说就是假如AB->C,A->C则AB->C这就是部分函数依赖。
① L类:某一个属性全部出现在函数依赖的左边
② R类:某一个属性全部出现在函数依赖的右边
③ LR类:出现在函数依赖的左右两边
④ N类:不出现在函数依赖中
规则:
⑴ 可能成为候选键的有L类,LR类和N类,R类属性不可能称为候选键的属性
⑵ 如果是L类,则求出他的闭包,若包含所有属性,则说明其为候选键,且为唯一候选键
⑶ 如果是LR类,求出其闭包,若能推出所有属性,则为候选键;若不包含,再找出其中一个属性与其结合
⑷ 如果是N类,直接为候选键
分析:
⑴ 判断非键属性是否部分依赖于候选键; 是则为1NF,否则进行⑵;
⑵ 判断非键属性是否传递依赖于候选键; 是则为2NF,否则进行⑶;
⑶ 判断所有依赖下左边是否全为候选键; 是则为BCNF,否则为3NF;
是针对于候选键的部分依赖,传递依赖
第一范式(1NF)是数据库正规化所使用的正规形式。
第一范式是为了要排除重复组的出现,要求数据库的每一列的论域都是由不可分割的原子值组成;每个字段的值都只能是单一值。
第二范式(2NF)是数据库正规化所使用的正规形式。
规则是要求资料表里的所有资料都要和该资料表的键(主键与候选键)有完全依赖关系:每个非键属性必须独立于任意一个候选键的任意一部分属性。
第三范式(3NF)是数据库正规化所使用的正规形式。
要求所有非主键属性都只和候选键有相关性,也就是说非主键属性之间应该是独立无关的。
1.找出候选码
2.寻找非键属性是否部分函数依赖,如果符合,则是1NF,如果不符合,则继续判断
3.非键属性是否传递依赖于候选键,如果符合,则他是2NF , 如果不符合,则继续判断
4.判断所有依赖项左边是否全为候选键, 如果是,则他是BC范式, 如果不是,就是3NF
求候选键 R(A B C D) , F = { B ->D , D ->B , A B -> C }
1.找候选码
L(只在左边出现的):A
R(只在右边出现的):C
LR(左右都出现的):B,D
N(左右都没有出现的):
然后判断A,B能导出全部。
AB是候选键
2.判断非键属性是否部分依赖于候选键
如果都是单字母的话,就不会有部分函数依赖。
因为AB是主码,所以有AB->D,但是有B->D,所以D是部分函数依赖于主码的,所以不满足2NF,所以最高只能为1NF
3.判断非键属性是否传递依赖于候选键
因为已经是属于第一范式,所以这一步将不存在