数据库基础:关系型数据库设计三大范式你能说的清楚吗?

yumo6666个月前 (03-25)技术文章36

对于初学者,数据库的三大范式那是一定要搞清楚,弄明白的,简单的说就是要建立结构合理,逻辑清晰的数据库。

第一范式:属性是最小单元,确保表中每列的原子性,不可分割;

举例说明:

学号

姓名

班级

10001

张三

五年二班

10002

李四

三年五班

上面的例子不符合第一范式,原因是班级不是最小单元,还可以拆分成年级、班级,修改后

学号

姓名

年级

班级

10001

张三

五年

二班

10002

李四

三年

五班

第二范式:满足第一范式的基础上,一张表中某一属性必须依赖所有主键才能获得,不能存在依赖某一个主键查出;

举例说明:假如学号和课程是主键

学号

姓名

系名

课程

分数

10001

张三

计算机系

计算机基础

89

10001

张三

计算机系

Java开发

69

10002

李四

计算机系

计算机基础

87

10002

李四

计算机系

Java开发

92

上面的例子符合第一范式,但是不符合第二范式,因为一个表中的某一属性必须完全依赖主键才能获得,例子中要想获得准确的分数,必须通过学号和课程才能获得,但是名字只需要通过学号就能获得,所以不是完全依赖于主键。修改后:拆分成两张表

学号

课程

分数

10001

计算机基础

89

10001

Java开发

69

10002

计算机基础

87

10002

Java开发

92

学号

姓名

系名

10001

张三

计算机系

10002

李四

计算机系

第三范式:首先满足第二范式,一张表的某一属性,必须直接依赖主键,不能出现这个属性依赖另一个非主键的属性,然后非主键属性依赖主键;

举例说明:假如学号是主键

学号

姓名

系名

系主任

10001

张三

计算机系

小明

10002

李四

计算机系

小明

10003

王五

电子工程系

小冬

上表中可以通过学号、系名找到系主任,但是系主任管理多个学生,不可能反推回去,也没有必要,造成数据的冗余。修改后

学号

姓名

系名

10001

张三

计算机系

10002

李四

计算机系

10003

王五

电子工程系

系名

系主任

计算机系

小明

计算机系

小明

电子工程系

小冬


以上就是我对关系型数据三大范式的理解,总结如下:第一范式的作用是要求每个关系的属性为原子性的,不可再分。即表中不能还有表。满足第二范式必须满足第一范式。第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分。满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。

如有不同见解,欢迎在评论区留言,共同成长,一同进步。

相关文章

数据库设计三范式的通俗理解

一、表字段是原子的例如一个字段不能即表示年龄,又表示性别,在数据库设计过程中字段对应对象的属性,必需唯一的表达二、记录是原子的一条记录唯一表述一个对象,并使用主键唯一描述例如,一条记录,不能说即表示张...

数据库结构优化、高可用架构设计、数据库索引优化

作者:唐成勇来源:https://segmentfault.com/a/1190000013746118一、数据库结构优化(非常重要)1.1 数据库结构优化目的 1、减少数据冗余:(数据冗余是指在数据...

慢 SQL 分析与优化

背景介绍从系统设计角度看,一个系统从设计搭建到数据逐步增长,SQL 执行效率可能会出现劣化,为继续支撑业务发展,我们需要对慢 SQL 进行分析和优化,严峻的情况下甚至需要对整个系统进行重构。所以我们往...