database笔记:范式的理解

今天终于完成了计算机三级数据库的考试,这也是本学期的第一门考试。听说计算机三级中要属计算机网络最简单,然而出于学到更多有用的知识的目的,我报了数据库。然而事实证明也没学到多少,毕竟这个计算机等级考试是给非计算机专业的人设置的,现在只求能过。不过两三天书看下来,还是有些收获,现在考完了有时间就在这里记一下,方便自己和别人今后有需要看。

References

电子文献:
https://blog.csdn.net/he626shidizai/article/details/90707037
https://blog.csdn.net/u013011841/article/details/39023859


范式

注意:本文中的范式指的是数据库范式。

在设计数据库时,为了设计一个良好的逻辑关系,必须要使关系受一定条件的约束,这种约束逐渐成为一种规范,就是我们所说的范式。
目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF)。要求最低的是1NF,往后依次变得严格。其中最后的5NF又称完美范式。
数据库一般只需满足3NF,下面我就介绍一下前三种范式。

第一范式

数据库考试官方教程并没有对每个范式的定义进行讲解,另外因为文字定义比较晦涩难懂,我这里通过多方参考,用图片的形式来展示各个约束条件。
首先,1NF是所有关系型数据库最基本的要求,它的定义为:符合1NF的关系中的每个属性都不可再分。下图就是一个违反1NF的例子:

修改如下:

上面的情况就符合1NF了。
我们还可以把第一范式分成两点来理解:

  1. 每个字段都只能存放单一值

    还是上反例: 上图中,第一行的课程有两个值,这就不符合第一范式了。因此要修改成这样:
  2. 每笔记录都要能用一个唯一的主键识别

    这里出现了重复组,同样也不满足1NF,因为缺乏唯一的标识码。因此修改如下:

第二范式

第二范式是建立在第一范式的基础上的,它的改进在于:消除了非主属性对于码的部分函数依赖。
第二范式消除了非主属性对于码的部分函数依赖,也就是说,第二范式中所有非主属性完全依赖于主键,即不能依赖于主键的一部分属性。
为了解释明白,还是通过实例的说明:

上表中,学号和课程号组合在一起是主键,但是姓名只由学号决定,这就违反了第二范式。同样的,课程名只由课程号决定,这也违反了第二范式。此外,只需要知道学号和课程号就能知道成绩。
为了满足第二范式,我们就需要对上表做如下拆分:

第三范式

同样的,第三范式建立在第二范式的基础上。不同之处在于,在第二范式的基础之上,第三范式中非主属性都不传递依赖于主键。
这是什么意思?还是看图说话:

上表中,主键是学号,且已满足第二范式。然而,学校的地址也可以根据学校名称来确定,第三范式就是在这里再做一个分解:


碰到底线咯 后面没有啦

本文标题:database笔记:范式的理解

文章作者:高深远

发布时间:2019年09月21日 - 19:58

最后更新:2020年01月19日 - 08:23

原始链接:https://gsy00517.github.io/database20190921195840/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%