【无标题】

如何制作一张3NF的数据库表

在正式制作表格前,先通过一些可视化软件制作成一个大概的表格

【无标题】_第1张图片

例如我使用的这个——Excel

学生 借阅信息 书籍
小明,男,23级 小明,借阅ID,书籍1 书籍1,29.9¥
小红,男,23级 小红,借阅ID,书籍2 书籍2,29.9¥

先制作一个大概的表如上

然后根据范式等级一级一级优化,3NF意味着需要进行三次优化

一级范式:遵循原子性。即,表中字段的数据,不可以再拆分

很复杂,很抽象,很难解

说人话:每一列,只有对应的一个属性

学生,包括了身份证,学号,年级,姓名,性别等等

书籍,包括了书籍编号,书籍价格,书籍作者,书籍介绍等等

身份证就只有对应的一个属性,学号只有对应的一个属性,而不是像上面的表格一样

一个学生列,对应了3个属性,是一对多,没有达到一对一的效果

学号 姓名 性别 年级 借阅编号 借阅者 被借阅书籍 书籍编号 书籍名 书籍价格
1 小明 23 1 小明 书籍1 1 书籍1 299
2 小红 23 2 小红 书籍2 2 书籍2 199

修改后,一列对一个属性,达到了1NF的标准

二级范式:在满足第一范式的情况下,遵循唯一性,消除部分依赖。即,表中任意一个主键或任意一组联合主键,可以确定除该主键外的所有的非主键值。

大白话:一个表只能描述一件事情

这里可以分为三个表,第一个表,用来存放学生信息

                                        第二个表,用来存放借阅信息

                                              第三个表,用来存放书籍信息

学号 姓名 性别 年级
1 小明 23
2 小红 23
借阅编号 借阅者 被借阅书籍
1 小明 书籍1
2 小红 书籍2
书籍编号 书籍名 书籍价格
1 书籍1 299
2 书籍2 199

在1NF中的一列对一个属性的基础上,找到他们之间的关系

学号 姓名 性别 年级 借阅编号 借阅者 被借阅书籍 书籍编号 书籍名 书籍价格

说简单点就是,我们最开始的那种表

学生 借阅信息 书籍
小明,男,23级 小明,借阅ID,书籍1 书籍1,29.9¥
小红,男,23级 小红,借阅ID,书籍2 书籍2,29.9¥

我们为了让这张表达到一级范式,我们细分了学生,借阅信息,书籍信息

然后为了达到二级范式,我们要把满足了第一范式的表拆分为三个表

无标准,到一级标准的过程是,一列对应一个属性

一级标准到二级标准的过程是,多个列组成一个表,并且具有一级标准

三级范式:在满足第二范式的情况下,消除传递依赖。即,在任一主键都可以确定所有非主键字段值的情况下,不能存在某非主键字段 A 可以获取 某非主键字段 B

说简单点就是,不能通过一个值去推另一个值

学号 姓名 性别 年级 借阅编号 借阅者 被借阅书籍

例如这一个表

一列一个属性,符合了一级范式

多个列一个表,并且每一个列对应一个属性,符合了二级范式

简单判断:

例如学号是主键,那么我们可以通过学号推出剩下的非主键

但是不能通过非主键推出学号

在这个表中可以通过借阅者去得到姓名,从而得到学号,不满足第三范式

其实像这个

学号 姓名 性别 年级
1 小明 23
2 小红 23
借阅编号 借阅者 被借阅书籍
1 小明 书籍1
2 小红 书籍2

改成这样,我们可以通过学号去推年级,但是不能通过年级去推学号

可以通过借阅编号去 推借阅者和书籍

但是不能通过借阅者和书籍去推借阅编号

总结:

一级范式,一列对一属性

二级范式,在一列对一属性的基础上,完成多列成一表

三级范式,在二级范式的基础上,每一个表,不存在逆推

你可能感兴趣的:(数据库)