数据库范式

来源:互联网 发布:php curl get请求参数 编辑:程序博客网 时间:2024/05/17 23:20

第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、BC范式(BCNF)、第四范式(4NF)、第五范式(5NF)

1、1NF的定义
如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF
第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库。
但是满足第一范式的关系模式并不一定是一个好的关系模式。

例. 关系模式S-L-C (Sno, Sdept, Sloc, Cno, Grade) Sloc为学生住处,假设每个系的学生住在同一个地方


S-L-C的码为(Sno, Cno)
S-L-C满足第一范式
非主属性Sdept和Sloc部分函数依赖于码

S-L-C不是一个好的关系模式

原因:Sdept, Sloc部分函数依赖于码


解决方法
S-L-C分解为两个关系模式,以消除这些部分函数依赖
SC (Sno, Cno, Grade)
S-L (Sno, Sdept, Sloc)


关系模式SC的码为 (Sno,Cno)
关系模式S-L的码为Sno
非主属性对码都是完全函数依赖

2、2NF定义 若R∈1NF,且每一个非主属性完全函数依赖于码,则R∈2NF

采用投影分解法将一个1NF的关系分解为多个2NF的关系,可以在一定程度上减轻原1NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。
将一个1NF关系分解为多个2NF的关系,并不能完全消除关系模式中的各种异常情况和数据冗余。

3、3NF


若R∈3NF,则每一个非主属性既不是部分依赖于码也不传递依赖于码


采用投影分解法将一个2NF的关系分解为多个3NF关系,可以在一定程度上解决原2NF关系中存在插入异常、删除异常、数据冗余度大、修改复杂等问题。
将一个2NF关系分解为多个3NF的关系后,仍然不能完全消除关系模式中的各种异常情况和数据冗余。

4、BCNF


若R∈BCNF
所有非主属性对每一个码都是完全函数依赖
所有的主属性对每一个不包含它的码,也是完全函数依赖
没有任何属性完全函数依赖于非码的任何一组属性


例. 关系模式C (Cno,Cname,Pcno)
C∈3NF
C∈BCNF
例. 关系模式S (Sno,Sname,Sdept,Sage)
假定S有两个码Sno,Sname
S∈3NF
S∈BCNF

例. 关系模式SJP (S,J,P)
S: 学生,J: 课程, P: 名次
函数依赖: (S,J)→P; (J,P)→S
(S,J)与 (J,P)都可以作为候选码,属性相交
SJP∈3NF
SJP∈BCNF

0 0