在数据库设计中,范式是用来规范化关系模式的常用方法。3NF范式是对于2NF进一步的优化,通过对数据表进一步拆分,避免数据冗余和不合理的依存关系。本文将以一个例题为基础,从多个角度对3NF范式分解进行分析。
假设有如下的关系模式:
书籍编号 书籍名称 作者编号 作者姓名 作者联系方式 出版社 出版年份 出版社地址
001 《数据结构与算法》 1001 张三 135xxxxxxxx 国防工业出版社 2019 年 北京市海淀区
002 《操作系统》 1002 李四 158xxxxxxxx 人民邮电出版社 2020 年 北京市海淀区
003 《计算机网络》 1003 王五 136xxxxxxxx 机械工业出版社 2018 年 北京市海淀区
004 《数据库原理》 1004 刘六 137xxxxxxxx 电子工业出版社 2019 年 北京市海淀区
其中,书籍名称与作者姓名的依赖关系为多对多,作者联系方式与作者姓名的依赖关系为一对多,出版社地址与出版社的依赖关系为一对多。
1. 第一步:确定主键
在进行范式分解之前,需要确定主键。从表中可以看出,书籍编号和作者编号为唯一标识。因此可以确定关系模式的主键为(书籍编号,作者编号)。
2. 第二步:消除冗余数据
由于作者姓名和联系方式只和作者编号有关,与书籍编号无关,故需要将其从书籍名称表中分离出来,得到以下两个新的关系模式:
1. 作者信息 (作者编号,作者姓名,作者联系方式)
2. 书籍信息 (书籍编号,书籍名称,作者编号,出版社,出版年份,出版社地址)
此时,每个关系模式中不存在数据冗余,因为所有重复的数据都被分离到了新的表中。
3. 第三步:消除传递依赖
在上面的新关系模式中,可以看出出版社地址与出版社名称关系非常密切,因此需要将出版社地址从书籍信息表中分离出来,得到如下两个新的关系模式:
1. 出版社信息 (出版社,出版社地址)
2. 书籍信息 (书籍编号,书籍名称,作者编号,出版社,出版年份)
在这里,每个关系模式中不再有传递依赖关系,因此可以看出这些关系模式是符合3NF范式的。