目录
关系模式的范式是衡量关系模式好坏的标准。范式的种类与数据依赖有着直接联系,满足不同程度要求的关系称为不同的范式等级。其中,满足最低要求的关系称为第一范式,简称1NF,以此类推,还有第二范式(2NF)、第三范式(3NF)、BC范式(BCNF)、第四范式(4NF)和第五范式(SNF)等多种。不同的范式表示关系模式遵守的不同规则。
各种范式之间是一种包含关系: 1NF⊃2NF⊃3NF⊃BCNF⊃4NF⊃5NF1
定义:若关系模式R的每个关系r的属性值都是不可分的原子值,则称R是第一范式1NF (First Normal Form)的模式。
如,关系模式R存放的是学生信息:
姓名 | 性别 | 出生日期 | ||
年 | 月 | 日 | ||
张三 | 男 | 1999 | 4 | 10 |
... | ... | ... | ... | ... |
应改成:
姓名 | 性别 | 出生日期 |
---|---|---|
张三 | 男 | 1999/04/10 |
… | … | … |
定义: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 |
即通过模式分解,使任一非主属性都完全函数依赖与它的任一候选键,也就是消除非主属性对键的部分函数依赖。
定义: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 | 王五 |
定义: 若关系模式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 |
定义:设关系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 |
… | … | … |
定义:如果关系模式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关系。
即:第三范式一定是第二范式也一定是第一范式······· ↩︎
指在连接时,所连接的属性均为候选码 ↩︎