范式:范式是符合某一种级别的关系模式的集合
规范化:是指一个低一级的范式的关系模式,通过模式的分解转换为若干个高一级范式的关系模式的集合。
1NF
每个分量必须是不可分开的数据项,满足这个条件的关系模式就是1NF。
2NF
若关系模式R属于1NF,并且每一个非主属性都完全函数依赖于任何一个候选码,则R属于2NF。
一个关系模式不满足2NF,会产生以下问题,例如:
sno | cno | Sdept | Sloc | Grade |
s1 | c1 | 数学系 | 1号宿舍楼 | 99 |
s1 | c2 | 数学系 | 1号宿舍楼 | 100 |
s1 | c3 | 数学系 | 1号宿舍楼 | 78 |
s1 | c4 | 数学系 | 1号宿舍楼 | 78 |
s2 | c1 | 数学系 | 1号宿舍楼 | 56 |
s2 | c2 | 数学系 | 1号宿舍楼 | 78 |
s2 | c3 | 数学系 | 1号宿舍楼 | 56 |
s2 | c4 | 数学系 | 1号宿舍楼 | 89 |
s2 | c5 | 数学系 | 1号宿舍楼 | 90 |
(1)插入异常
如果插入一个学生,但该学生未选课,即无Cno,由于插入元组时,必定给定码值,因此插入失败。
(2)删除异常
如果一个学生s4只选了一门课c3,现在他不再选这门课,则删除c3以后,整个元组的其他信息也被删除了。
(3)修改复杂
如果一个学生选了多门课,则Sdept,Sloc被存储了k次,如果该学生转到了其他系,则需要修改所有相关的Sdept和Sloc,造成修改的复杂化。
若修改为2NF:
SC(Sno,Cno,Grade)
S-L(Sno,Sdept,Sloc)
3NF
设关系模式R<U,F>属于1NF,若R中不存在这样的码X、属性Y及非主属性Z(Z 不包含 Y),使得X->Y , Y->Z成立,Y无法推出Z不成立,则称R<U,F>属于3NF。
比如:S-S-L(Sno,Sdept,Sloc)中sno学号可以推出Sdept系,Sdept系可以推出Sloc学生住所,存在传递依赖,不属于3NF。
可以修改为:
S-S(Sno,Sdept)
S-L(Sdept,Sloc)
这样就属于3NF了。
BCNF
比3NF更进一步,通常认为BCNF是修正的第三范式,有时也称为扩充的第三范式。 设关系模式R<U,F>属于1NF,若X可以推出Y且Y不属于X时必含有码,则R<U,F>属于BCNF。
BCNF的关系模式所具有的性质:
(1)所有非主属性都完全函数依赖于每个候选码。
(2)所有主属性都完全函数依赖于每个不包含他的候选码。
(3)没有任何属性完全函数依赖于非码的任何一组属性。