> 文章列表 > 数据库三大范式学习笔记(非常详细)

数据库三大范式学习笔记(非常详细)

数据库三大范式学习笔记(非常详细)

首先范式是什么:

是对设计数据库提出的一些规范,设计数据库时遵循一定的规则,建立冗余较小、结构合理的数据库更便于查找数据。

第一范式(1NF):

强调列的原子性,原子性即最小单位,不可再拆分,也就是数据库建的表的列是不可拆分的;

举个例子:

people表

user

张三,189……9030,男

这个表格很明显列是可以拆分为name ,tel ,gender;

所以它不满足第一范式:

正确建表如下:

user表

name

tel

gender

张三

189……9030

现在的每列都无法继续拆分成更小单元了,即满足了第一范式。

第二范式(2NF):

首先第二范式是要满足第一范式的基础上需要遵循的规范:

要求主键列与非主键列遵循完全函数依赖关系,而不能只与主键的某部分相关(主要针对联合主键)。

完全依赖关系是什么:

通俗来说,完全依赖关系就是,假如X的值确定,必然可以推出Y的值的时候,那么就是Y完全依赖于X;

类比函数的定义:凡相关的两数X与Y,对于每个X值,都只有一个Y的对应值。这种对应关系就表示Y是X的函数。

函数依赖关系中,不存在俩个Y依赖于一个X,也就是说一个X不能推出俩个Y。

举个例子:

学号 成绩(不是完全函数依赖关系)(学号不能够直接推出成绩)

学号 + 课程名 成绩(是函数依赖关系)(学号+课程名可以推出成绩,而且只有一个唯一的成绩与之对应)

主键(主码)是什么:

主键就是被挑选出来,作表的行的唯一标识的候选关键字。

主键的作用有四个:可以保证实体的完整性;能够加快数据库的操作速度;在表中添加新记录时,会自动检查新记录的主键值,不允许该值与其他记录的主键值重复;自动按主键值的顺序显示表中的记录,但如果没有定义主键,则按输入记录的顺序显示表中的记录。

举个例子:

订单详情表

订单ID

产品ID

单价

折扣

数量

产品名称

1001

002

8888

0.99

100

电脑

折扣,数量,完全依赖主键订单ID,但是单价,产品名称依赖于产品ID。

所以这个表不满足第二范式

应该拆分为如下俩表:

订单详情表

订单ID

产品ID

折扣

数量

1001

002

0.99

电脑

产品表

产品ID

单价

产品名字

002

8888

电脑

重点分析下面俩表,首先我们找到主键;

订单详情表中的主键是:订单ID;产品ID,折扣,数量依赖于产品ID

产品表中的主键是:产品ID;单价,产品名字依赖于产品ID。

第三范式(3NF):

在第二范式的基础上,规定了第三范式。

第三范式确保主键列之间没有传递函数依赖关系,也就是消除传递依赖。

举个例子:

people表

旅游订单ID

游客ID

游客姓名

游客地址

旅游城市

日期

001

1001

张三

XX市

海南

2023

这个表,游客ID,游客姓名,游客地址,旅游城市,日期;都依赖于旅游订单ID。

但是这里游客姓名,游客地址依赖于游客游客ID,第三范式就是消除这种传递依赖。

所以我们将其拆分为俩个表

旅游订单ID

游客ID

旅游城市

日期

001

1001

海南

2023

游客ID

游客姓名

游客地址

1001

张三

XX市