数据库关系模式的范式总结

目录

  1. 什么是关系模式的范式
  2. 第一范式(1NF)
  3. 第二范式(2NF)
  4. 第三范式(3NF)
  5. BC范式(BCNF)
  6. 第四范式(4NF)
  7. 第五范式(5NF)

什么是关系模式的范式

        关系模式的范式是衡量关系模式好坏的标准。范式的种类与数据依赖有着直接联系,满足不同程度要求的关系称为不同的范式等级。其中,满足最低要求的关系称为第一范式,简称1NF,以此类推,还有第二范式(2NF)、第三范式(3NF)、BC范式(BCNF)、第四范式(4NF)和第五范式(SNF)等多种。不同的范式表示关系模式遵守的不同规则。

各种范式之间是一种包含关系:    1NF⊃2NF⊃3NF⊃BCNF⊃4NF⊃5NF1


1.第一范式(1NF)

定义:若关系模式R的每个关系r的属性值都是不可分的原子值,则称R是第一范式1NF (First Normal Form)的模式。

如,关系模式R存放的是学生信息:

姓名 性别 出生日期
张三 1999 4 10
... ... ... ... ...
        虽然看上去将出生日期分成年月日更准确,但这种情况下出生日期不再是基本属性而是由年、月、日三个分属性组成的复合属性,因此 该模式不满足1NF的范式要求。

        应改成:

姓名 性别 出生日期
张三 1999/04/10

2.第二范式(2NF)

定义:1.对于FD W→A,若存在X⊆W有X→A成立,则称W→A是局部依赖(A局部依赖于W);否则称W→A是完全依赖。完全依赖也称为“左部不可约依赖”。
        2.若A是关系模式R中候选键属性,则称A是R的主属性:否则称A是R的非主属性。
        3.若关系模式R是1NF,且每个非主属性完全函数依赖于候选键,则称R是第二范式(2NF)的模式。若数据库模式中每个关系模式都是2NF,则称数据库模式为2NF的数据库模式。


        简单来说在满足第一范式的情况下,候选键与其他键都是完全依赖函数,那么此关系模式就是第二范式。

举个例子:关系模式如图所示,sno为学号,cno为课程号

sno cno grade
95001 1 92
95004 1 58
95002 2 90
95003 2 85

该关系模式中存在函数依赖:sno→grade,但该关系模式的主键是sno、cno,因此有(sno,cno)→grade,即存在非主属性对主键的部分依赖关系,所以此关系模式不满足第二范式要求

应改成:

sno cno
95001 1
95004 1
95002 2
95003 2
sno grade
95001 92
95004 58
95002 90
95003 85

即通过模式分解,使任一非主属性都完全函数依赖与它的任一候选键,也就是消除非主属性对键的部分函数依赖。


3.第三范式(3NF)

定义:1.若x→Y, Y→A, 且Y-/->x和A⫋Y,则称X→A是传递依赖(A传递依赖于X)。
           2. 若关系模式R是1NF,且每个非主属性都不传递依赖于R的候选键,则称 R是第三范式(3NF)的模式。若数据库模式中的每个关系模式都是3NF,则称其为3NF的数据库模式。

3NF的目的是消除非主属性对键的传递函数依赖。

举个例子:
关系模式如图所示,Mname为系主任,sno为主属性

sno sname ssex sage sdept Mname
95001 李勇 20 CS 张三
95002 刘晨 19 IS 李四
95003 王敏 18 MA 王五
95004 张立 19 IS 李四
95005 刘云 18 CS 张三

可知 sno→sname,sno→ssex,sno→sage,sno→sdept,sdept→Mname

因为sno→sdept,sdept→Mname
所以sno与Mname是传递依赖,因此该关系模式不满足第三范式要求


应改为:
sno sname ssex sage sdept
95001 李勇 20 CS
95002 刘晨 19 IS
95003 王敏 18 MA
95004 张立 19 IS
95005 刘云 18 CS
sdept Mname
CS 张三
IS 李四
MA 王五

4.BC范式(BCNF)

定义: 若关系模式R是1NF,且每个属性都不传递依赖于R的候选键,则称R是 BCNF的模式。若数据库模式中的每个关系模式都是BCNF,则称为BCNF的数据库模式。

举个例子:
关系模式如图所示:其中候选键(sno,cno),(sname,cno) ,假设不重名

sno sname cno grade
95001 李勇 1 20
95001 李勇 2 30
95002 刘晨 2 19
95003 王敏 1 18
95004 张立 2 19
95005 刘云 1 18

该关系模式存在依赖:sno→sname,sname→sno,(sno,cno)→grade,(sname,cno)→grade

应该为:

sno sname
95001 李勇
95002 刘晨
95003 王敏
95004 张立
95005 刘云
sno cno grade
95001 1 20
95002 2 19
95003 1 18
95004 2 19
95005 1 18

5.第四范式

定义:设关系R(X,Y,Z),其中X,Y,Z是成对的、不相交属性的集合。若存在非平凡多值依赖,则意味着对R中的每个属性 Ai(i=1,2,…,n)存在有函数依赖 X→Ai(X必包含键)。那么 称R是第四范式的模式 。

        也就是说,当一个表中的非主属性互相独立时(3NF),这些非主属性不应该有多值。若有多值就违反了第四范式。

举个例子:
        当我们统计一个人电话号码时,他可能有多个手机号码或固定电话。name为主键
这时关系模式为:

name cellphone telephone
李勇 131xxxxxxxx 0551-xxxxxxxx
李勇 139xxxxxxxx 0539-xxxxxxxx

这样在日后维护中可能产生不必要的麻烦,比如当用户弃用第一行的手机号码和第二行的固定电话号码时,两行会合并吗?
此时违反了第四范式要求

应改为:

name type phone
李勇 telephone 0551-xxxxxxxx
李勇 cellphone 139xxxxxxxx

6.第五范式

定义:如果关系模式R中的每一个连接依赖均由R的候选码所隐含2,则称此关系模式符合第五范式。

例如:有一个销售信息表。

name company item
李勇 xxxx xxxx

此时违反了每一个连接依赖均由R的候选码所隐含的要求。
应改为:

name company
李勇 xxxxx
company item
xxxxx xxx
.
name item
李勇 xxx

总结:

        规范化的过程就是在数据库表设计时移除数据冗余的过程。随着规范化的进行,数据冗余越来越少,但数据库的效率也越来越低. 这就要求在数据库设计中,能结合实际应用的性能要求,规范到合适的范式。

        规范化的过程可概括如下:
(1)取原始的1NF关系投影,消去非主属性对键的部分函数依赖,从而产生一组2NF关系。
(2)取2NF关系的投影,消去非主属性对键的传递函数依赖,产生一组3NF关系。
(3)取这些3NF的投影,消去决定因素不是键的函数依赖。产生一组BCNF关系。
(4)取这些BCNF关系的投影,消去其中不是函数依赖的非平多值依赖,产生一组4NF关系。
(5)取4NF关系的投影,消除不是由候选码所蕴含的连接依赖,产生一组5NF关系。


  1. 即:第三范式一定是第二范式也一定是第一范式······· ↩︎

  2. 指在连接时,所连接的属性均为候选码 ↩︎

你可能感兴趣的:(sql)