MySQL数据库实验(五):范式

为什么要学习“范式”?
什么是“范式”?

范式

在设计数据库时,数据库开发人员的经验非常重要!
但是全凭经验会导致人为的不确定因素剧增。
如何将数据库设计的过程上升到一定的 “理论高度”呢?
数据库开发人员有必要制定一套数据库设计的“质量标准”。——范式

评价数据库表设计的质量

设计数据库时,有两个不争的事实:

  • 数据库中冗余的数据需要额外的维护,因此质量好的一套表应该尽量“减少冗余数据”。
  • 数据库中经常发生变化的数据需要额外的维护,因此质量好的一套表应该尽量“避免数据经常发生变化”。

使用规范化减少数据冗余

冗余的数据需要额外的维护,并且容易导致“数据不一致”“插入异常”以及“删除异常”等问题的发生。
MySQL数据库实验(五):范式_第1张图片

场景一:插入异常

MySQL数据库实验(五):范式_第2张图片

  • 添加一学生信息(2012006,张三丰,北京,10000);
  • 由于当前该生未选择课程,课程号为空,课程号是区分课程信息的主码,因此课程号不能为空;
  • 因此该生信息无法录入到数据库表中;

场景二:修改复杂

MySQL数据库实验(五):范式_第3张图片

  • 需要将课程号为5的课程名修改为“高等数学”,表中所有的5号课程都需要修改,维护工作量大;
  • 因此该生信息无法录入到数据库表中;一旦遗漏就会出现“数据不一致”问题;

场景三:删除异常

MySQL数据库实验(五):范式_第4张图片

  • 需要将学号为“20120005”的学生信息删除,但不希望删除居住地“天津”与邮编“300000”之间的对应关系,然而这种表结构不可能实现;
  • 因为“居住地”与“邮编”之间的对应关系,依赖于学生信息以及课程信息。

上述异常可以看作是“数据冗余”的“并发症”;如何检测和消除表中的冗余数据呢?数据库规范化;

规范化是通过最小化数据冗余来提升数据库设计质量的过程,规范化是基于函数依赖以及一系列范式定义的,最为常用的是第一范式(1NF)第二范式(2NF)第三范式(3NF)

**函数依赖:** 一张表内两个字段值之间的一一对应关系称为函数依赖。

在一个数据表中,字段A的值能够唯一确定字段B的值,那么字段B函数依赖于字段A。

第一范式

第一范式:如果一张表内同类字段不重复出现,该表就满足第一范式的要求。
MySQL数据库实验(五):范式_第5张图片MySQL数据库实验(五):范式_第6张图片

第二范式

一张表在满足第一范式的基础上,每一个非主属性完全函数依赖于主码,那么该表满足第二范式的要求。
第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言),也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。

“非主属性” 姓名、性别不仅函数依赖于联合主键(学号和课程号),而且还函数依赖于学号。
同样,“非主属性”课程名不仅函数依赖于联合主键(学号和课程号),而且还函数依赖于课程号。
MySQL数据库实验(五):范式_第7张图片

第三范式

第三范式:如果一张表满足第二范式的要求,并且不存在“非主属性”字段函数依赖于任何其他“非主属性”字段,那么该表满足第三范式的要求。
第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。
如:“非主属性”邮编函数依赖于“非主属性”居住地;
MySQL数据库实验(五):范式_第8张图片

第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。

MySQL数据库实验(五):范式_第9张图片

见以往文章:
MySQL数据库实验(四):E-R图实例讲解
MySQL数据库实验(三):表记录的检索
MySQL数据库实验(二):表的操作
MySQL数据库实验(一):数据库备份

MySQL数据库实验(五):范式_第10张图片

你可能感兴趣的:(MySQL)