本文主要是介绍范式(上)-第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、可用关系模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、范式的作用
根据关系模式间属性的数据依赖来评价关系模式的好坏
以下我们将基于函数依赖的范围内来讨论范式
二、范式的定义
1、数据依赖满足一定约束的关系模式是范式
2、范式是符合某一级别的关系模式的集合,关系模式R为第几范式可记为
三、第一范式(1NF)
1、定义:
对于关系模式R,当且仅当R中的每个属性对应的域是原子的,则该关系模式R属于第一范式,即
2、正面的例子:
有关系模式R,学生学号和课程编号共同组成R的主键
R(学生学号,课程编号,学生姓名,所在系,系主任,成绩)
每个属性对应的域都是原子的,满足第一范式的条件,因此关系模式R属于第一范式,即
3、反面的例子
有关系模式R
R(学生学号,课程编号,学生姓名,所在系,系主任,成绩)
其所在系属性为复合属性或者其成绩属性为多值属性,则
该关系模式R不属于第一范式
4、分析
对于关系模式R:
R(学生学号,课程编号,学生姓名,所在系,系主任,成绩)属于第一范式,但是依旧存在着数据冗余、更新异常、数据不一致三个问题
四、 第二范式(2NF)
1、定义
对于关系模式R,当且仅当,且R中的每一个非主属性都完全依赖于候选键时,该关系模式R属于第二范式,即
2、反面例子
对于关系模式R:
R(学生学号,课程编号,学生姓名,所在系,系主任,成绩)
由于
所以
2、正面例子
由于
成绩完全依赖于候选键(学生学号,课程编号),而
学生姓名完全依赖于学生学号,所在系完全依赖于学生学号,系主任完全依赖于学生学号,
则将关系模式R分解为两个关系模式
R1(学生学号,课程编号,成绩)
R2 (学生学号,学生姓名,所在系,系主任)
则这两个关系模式均属于第二范式,即,
消除了关系模式R中“非主属性对候选键的部分函数依赖”,解决了部分数据冗余问题和部分数据更新异常问题
4、结论:
满足2NF的关系模式要比满足1NF的关系模式要好
五、第三范式(3NF)
1、定义
对于关系模式R,当且仅当,且R中所有非主属性都不传递函数依赖于候选键时,该关
系模式R属于第三范式,记作
2、正面的例子
关系模式R(学生学号,课程编号,学生姓名,所在系,系主任,成绩)和
关系模式R1(学生学号,课程编号,成绩)都符合第三范式的条件,记为、
3、反面的例子
关系模式R2 (学生学号,学生姓名,所在系,系主任)中系主任传递函数依赖于学生学号
则
可通过将R2分解为
关系模式R3(学生学号,学生姓名,所在系)和
关系模式R4(所在系,系主任)
使得,
消除了“非主属性对候选键”的传递函数依赖”,进一步消除了关系模式存在的数据冗余、更新异常和数据不一致问题
4、结论:
(1)满足3NF的关系模式要比满足2NF的关系模式要好
(2)3NF是一个可用的关系模式应该满足的最低范式要求
这篇关于范式(上)-第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、可用关系模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!