数据库(笔记)——关系模式的范式
范式的是作为评判一个数据表的创建是否符号要求的标准
第一范式
定义:关系模式R中的所有属性都是不可再分的,则R属于第一范式,记作
R∈1NF,简称1NF
所谓的属性可再分,如,假设有个属性叫身材,而身材可以分为身高、体重等属性
- 缺点:仅仅是属于第一范式的关系模式,在插入、删除、更新数据的时候会存在异常的情况,并且存在大量数据冗余
第二范式
若R∈1NF,且每个非主属性都是完全依赖于R的主关系键(就是主键),则称R属于第二范式,记作R∈2NF
- 那么第一范式要转化为第二范式,就需要将不分函数依赖去掉,如下是处于第一范式的关系模式
转化为如下模式,就是第二范式了 - 第二范式的缺点是,由上图也能看到,存在着传递函数依赖,由此也会带来数据操纵的异常,同时会有较多的数据冗余
第三范式
当R∈2NF时,若每个非主属性都不传递依赖于R的主键,则R属于第三范式,记作R∈3NF
在第三范式下,数据冗余大幅度降低,并且几乎不存在数据操纵异常
下面用一个例子来走一遍几个范式递升过程
关系模式R(Sno,Sname,City,State,Pno,Pname,Color,Weight,QTY)
- 分别是:供应商编号,供应商名,来自城市,国家,零件编号,零件名,零件颜色,零件重量,零件数目
函数依赖:Sno→Sname,Sno→State,Sno→City,City→State,Pno→Pname,
Pno→Color,Pno→Weight,(Sno,Pno)→QTY
主码:(Sno,Pno)
默认加粗为主键
- 首先,该关系模式已经是一个第一范式了,观察发现,存在部分函数依赖,因此,先转化为第二范式,得到如下三个关系模式
R1(Sno,Sname,State,City)
R2(Pno,Pname,Color,Weight)
R3(Sno,Pno,QTY) - 在新的关系模式R1中,有Sno→City,City→State,从而State是传递函数依赖于主键Sno的,它还不符合第三范式,应转化为如下
R1’(Sno,Sname,City)
R1’’(City,State) - 那么最后得到的几个关系模式都能够满足第三范式
R1’(Sno,Sname,City)
R1’’(City,State)
R2(Pno,Pname,Color,Weight)
R3(Sno,Pno,QTY)
BC范式
若R∈1NF,且所有的函数依赖X→Y(Y∉X),X都包含有R的一个候选键,则称R属于BC范式,记作R∈BCNF
- 若R∈BCNF,则一定有R∈3NF,反之不一定成立