在设计数据库中,需要遵从不同的规范要求,不同的规范即时不同的范式,每种范式呈递次规范,这样才能最大程度的消除冗余程度。
目前关系数据库有六种范式:1NF(第一范式)、2NF(第二范式)、3NF(第三范式)、4NF(第四范式)、5NF(完美范式)。
1NF(第一范式):
定义:关系模式中R中的每一个属性A的值域都是不可分的原子项。
说明:满足1NF的关系称为规范化的关系,否则称为非规范化的关系。
例如:
学生姓名 | 学生课程 |
---|---|
张三 | 数据结构,Java程序设计,SQL数据库设计 |
上表就不满足1NF,因为{数据结构,Java程序设计,SQL数据库设计}是集合,而下表就满足了。
学生姓名 | 学生课程 |
---|---|
张三 | 数据结构 |
张三 | Java程序设计 |
张三 | SQL数据库设计 |
2NF(第二范式):
定义:在1NF的基础上,消除非主属性对键的部分依赖,即为2NF。
例如下表:
学生学 | 学生姓名 | 班级 | 课程 | 院系 |
---|---|---|---|---|
001 | 张三 | 软件181 | C110 | 计算机科学系 |
002 | 李四 | 电器181 | C113 | 信息工程系 |
003 | 王五 | 英语181 | C119 | 人文科学系 |
对于上表,学生姓名、班级 对学生学 和课程 属部分函数依赖。对上表可进行拆分,可消除部分依赖。如下所示。
学生表:
学生学 | 学生姓名 | 班级 | 院系 |
---|---|---|---|
001 | 张三 | 软件181 | 计算机科学系 |
002 | 李四 | 电器 181 | 信息工程系 |
003 | 王五 | 英语181 | 人文科学系 |
课程表
学生学 | 课程 |
---|---|
001 | C110 |
002 | C113 |
003 | C119 |
3NF(第三范式):
定义:在2NF基础上,消除非属性对键的传递依赖,就是不包含传递相关性,即为3NF。
在下表中,我们可看出用学生学 可确定学生的所在班级。
学生学 | 学生姓名 | 班级 | 课程 | 院系 |
---|---|---|---|---|
001 | 张三 | 软件181 | C110 | 计算机科学系 |
002 | 李四 | 电器181 | C113 | 信息工程系 |
003 | 王五 | 英语181 | C119 | 人文科学系 |
在班级 中又可确定院系。由此可见,院系对学生学 存在传递依赖。
而对学生表进行拆分,就可消除传递依赖。
班级-院系如下:
C110 | 计算机科学系 |
---|---|
C113 | 信息工程系 |
C119 | 人文科学系 |
BCNF:
符合3NF,并且主属性不依赖主属性,即消除原关系中主属性对键的部分与传递依赖。
条件:所有非主属性对每一个候选键都是完全函数依赖;所有的主属性对每一个不包含它的候选键,也是完全函数依赖;没有任何属性完全函数依赖与非候选键的任何一组属性。
在设计数据库时,最重要的就是符合1NF、2NF、3NF和BCNF对于4NF和5NF尽量注意就可以了。我们可以了解一下。
4NF:
要求将同意表内的多对多关系删除。
5NF:
从最终结构重新建立原始结构。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!