数据库知识——三大范式

今日在实训中学到了一些有关数据库的一些基础知识:通过范式来实现对三大异常与数据冗余的去除,写个博客记录一下。

Dr E.F.codd 最初定义了规范化的三个级别,范式是具有最小冗余的表结构,用来在数据库中减少冗余,达到目的。

在学习范式之前,我们学习一点预备知识:

预备知识1:主键(primary KEY)

1、主键是一个数据表中唯一且非空的键值,默认为唯一性约束与非空只有主键才能实现自动增长,是划分不同元素行的重要依据;
2、主键在一个表中分为单个主键和复合主键,主要区别为:
单个主键可通过一个主键直接控制所有列的tag

例如:学生基本信息表中有学号,姓名,年级,性别,生源地;
其中学号为主键,可以控制姓名,年级,性别等所有tag。

复合主键需要在两个或两个以上的主键控制下控制所有tag。

例如:学生课程表中有学号,姓名,年级,课程号,学分;
其中学号为主键,只控制姓名,年级;课程号也为主键,只控制学分。

预备知识2:依赖

1、部分函数依赖:基础为复合主键控制数据表,其中部分tag只受复合主键的其中一个键(一部分)控制
例图
在这里插入图片描述
2、传递函数依赖:在一个表中,某列依赖于主键,而另一列又依赖于这个列,形成传递关系
例图
在这里插入图片描述
表中含有依赖的话可能会造成冗余与异常的情况,解决办法就是使用范式消除依赖

下面我们来重点学习一下有关范式的相关概念:
第一范式(1NF):要求数据库表的每一列都是不可分割的原子数据项。,如果每列都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式(1NF)
第一范式用来检索数据库中是否有表套表的情况
在这里插入图片描述
第二范式(2NF):在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖),使数据库表中的每一列都和主键相关,而不只与主键的某一部分相关(主要针对联合主键而言),以防一部分表内容消失后会对主键内容产生影响,消除部分函数依赖。
在这里插入图片描述
第三范式(3NF):在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖),确保数据表中的每一列数据都和主键直接相关,而不能间接相关。
在这里插入图片描述
单纯列出知识点还是很难理解其用法,下面以一个例题作为示范来应用
在这里插入图片描述
如何将列属性为上图的表进行数据表评价呢?

首先找到primary KEY,这里很显然是工程号与职工号
然后找到其他列与主键的从属关系(根据第二范式找部分依赖),拆表

在这里插入图片描述
在这里插入图片描述
最后根据第三范式找传递关系,再拆表

在这里插入图片描述

最后结果即为所求

以上就是本博客所讲的内容啦!

发布了36 篇原创文章 · 获赞 11 · 访问量 2904

猜你喜欢

转载自blog.csdn.net/yeweij226/article/details/100128687