每周学点测试小知识-数据库三大范式

跟着芒果一起好好学习,天天向上

上周四下午的VIP试听课是由芒果给大家介绍的MySQL的一些基础知识,在这里芒果给大家分享其中的一部分内容——对数据库三大范式做个小介绍:

范式(数据库的设计范式)是符合某一种级别的关系模式的集合。构造数据库必须遵循一定的规则,在关系数据库中,这种规则就是范式。关系数据库中的关系必须满足一定的要求,即满足不同的范式。范式,对于软件的性能、数据库的维护都是我们软件从业人员必须掌握的内容。

目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、Boyce-Codd范式(BCNF)、第四范式(4NF)和第五范式(5NF)。

满足最低要求的范式是第一范式(1NF),在第一范式的基础上进一步满足更多要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了,所以在这里我也就跟大家介绍这三大范式。这六种范式关系如下图所示:

第一范式(1NF)

确保每列的原子性(强调的是列的原子性,即列不能够再分成其他几列)。实际上,第一范式是所有关系型数据库的最基本要求。

例:

按照1NF的要求如上图的数据表,它的第三列和第四列明显是不符合原子性的,这两列都可以被分割为两列,要符合第一范式,我们可以将其改为以下形式:

第二范式(2NF)

第二范式依赖第一范式,所以第二范式必须符合第一,然后第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。

例:

如上图所示数据表,它的主键为:学号+课程(联合主键),而姓名、系名、系主任都是仅仅依赖于学号,与课程无关,明显不符合第二范式。

对于每一个学生的姓名、系名、系主任信息都重复多次——数据冗余;如果学校新开设一个院系,还未招生,无学号即课程表,则系名跟系主任无法插入表格——插入异常;如果删除某一个系所有学生的成绩信息,那么系名、系主任信息也会随之消失——删除异常;如果修改某个学生的姓名,则表格中多条记录都要进行修改——修改异常

对于这样的表格,我们肯定要进行修改的,那么要怎么修改才能满足第二范式呢?

我们首先来看表格属性的关系图:

从上图我们可以看出姓名、系名都与学号相关;而系主任与系名相关,间接与学号相关;分数与学号+课程名相关。因此我们可以根据这些关系依赖将表格,拆分为以下两个表格:

这样分割之后,表1的分数与主键(学号+课程)相关,表2的姓名、系名、系主任与主键(学号)相关,而非部分相关,满足第二范式要求。

第三范式(3NF)

在第二范式的基础上更进一层,目标是确保每列都和主键列直接相关,而不是间接相关(另外非主键列必须直接依赖于主键,不能存在传递依赖)。

上面根据第二范式修改的表格中,在表2中,系主任是通过系名与学号间接相关的,明显不符合第三范式。

并且当一个系有多名学生时(在实际记录中,这是必然情况),系主任信息也会有多条——数据冗余;如果学校新开设一个院系,还未招生,无学号即课程表,则系名跟系主任无法插入表格——插入异常没有解决;如果删除某一个系所有学生的成绩信息,那么系名、系主任信息也会随之消失——删除异常也没有解决。 

对于这样的表格,我们肯定要进行修改的,那么要怎么继续修改才能满足第三范式呢?

我们再来看表格属性的关系图:

从上图我们可以看出姓名、系名都与学号直接相关;而系主任与系名直接相关;分数与学号+课程名相关。因此我们可以根据这些关系依赖将上面的表格2,拆分为以下两个表格,具体表格情况如下:

这样就满足了第三范式,而且对于数据冗余、插入异常、删除异常的情况都得到了解决。

好了,今天的学习内容大家掌握的如何呢?欢迎加芒果微信跟芒果一块儿讨论哟~

TestOps|测试运维

精益技术 赋能过程

(0)

相关推荐

  • 关系模式范式分解教程 3NF与BCNF口诀

    https://blog.csdn.net/sumaliqinghua/article/details/86246762 [通俗易懂]关系模式范式分解教程 3NF与BCNF口诀!小白也能看懂 原创置顶 ...

  • 范式通俗理解:1NF、2NF、3NF和BNCF

    https://blog.csdn.net/wyh7280/article/details/83350722 范式通俗理解:1NF.2NF.3NF和BNCF 原创hongiii 最后发布于2018-1 ...

  • 数据库三范式和反三范式

    要说数据库什么最抽象,我觉得就是这个三范式,不是很好理解,但是表在设计的时候又必须要知道这么一个规则. 首先使用最简洁的话说说这三范式: 第一范式(1NF:The First Normal Form) ...

  • 数据库三大范式

    数据库三大范式 数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的.结构明晰的,同时,不会发生插入(insert).删除(delete)和更新(update)操作异常. 1.第 ...

  • 数据库的三级范式,涉及范式的问题

    范式是具有最小冗余的表结构. 三范式具体如下: 1.第一范式(1NF):字段都是不可再分的:原子性: 第一范式的目标是确保每列的原子性:如果每列都是不可再分的最小数据单元,则满足第一范式(1NF): ...

  • 每周学点测试小知识——分布式Jmeter

    跟着芒果一起,好好学习,天天向上~ 这里芒果为大家总结一下我们上周三节Vip试听课--分布式Jmeter的知识点,大家一起涨姿势~ 周三晚上的公开课,是由叮咚老师介绍分布式Jmeter~ 让我们来看看 ...

  • 每周学点测试小知识——WebDriver定位元素

    跟着芒果一起,好好学习,天天向上~ 上周四下午的公开课是芒果给大家介绍的自动化相关知识--WebDriver定位元素,在这里芒果给大家做个小介绍: 下面是这次课程的思维导图: 这里我们先来看看tag ...

  • 每周学点测试小知识-Linux文件属性

    跟着芒果一起,好好学习,天天向上~ 上周五下午的vip试听课是芒果给大家介绍的Linux的一些基础知识,在这里芒果给大家对于其中的一部分内容--Linux文件属性做个小介绍: 课堂上芒果给大家介绍过L ...

  • 每周学点测试小知识-bat批处理命令

    跟着芒果一起,好好学习,天天向上~ 今天芒果要跟大家一起介(tu)绍(cao)一下bat批处理命令~ 批处理文件,顾名思义,是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者C ...

  • 每周学点测试小知识-WebDriver页面操作

    跟着芒果一起好好学习,天天向上~ 不知道关注我们的课程或者公众号的同学还记不记得我们的WebDriver定位元素介绍的八种定位方式?今天的文章是关于定位之后的后续--WebDriver页面操作. 控制 ...

  • 每周学点测试小知识-正则表达式

    跟着芒果一起,好好学习,天天向上~ 好久不见的每周学点测试小知识,在上周的课堂上芒果给大家介绍了正则表达式,在这里我们简单的复习一下,认识一下正则表达式,并且学习一些常用的元字符: 正则表达式简介 正 ...

  • 每周科普丨染色体小知识

    染色体的定义 染色体是细胞内具有遗传性质的遗传物质,是基因的载体.常说宝宝眼睛像爸爸,嘴巴像妈妈,这就与其密切相关 而染色体核型分析就是借助染色分带技术,将一个典型的二倍体细胞的全部染色体根据其长度. ...

  • 每天学点养生小知识:秋冬季节,注意防寒驱寒,养生该吃什么呢?

    俗话说"百病从寒起",尤其是在进入秋冬季节,天气寒冷比较干燥,在这个季节更容易发生感冒.发烧等一系列呼吸道疾病,所以在这个季节更要注重养生保健,帮助身体驱寒保暖,同时也要多吃一些, ...