数据库设计三范式的通俗解释
发布日期:2022-02-22 18:04:21 浏览次数:17 分类:技术文章

本文共 901 字,大约阅读时间需要 3 分钟。

一、第一范式

1.1 描述

1NF主要是关于属性的原子性,要求属性具有原子性,不可再分解

1.2 案例

学生表字段
学号
姓名
性别
出生年月

表中的出生年月字段,如果认为其还能再细分为:

出生年月
年份
月份

这样的话,出生年月字段就不符合原子性,那就不是第一范式。不能再细分的话,就符合第一范式。

二、第二范式

2.1 描述

2NF主要是关于记录的唯一性,要求表中实体的唯一性,即不存在部分依赖(表中所有非主键字段都必须依赖主键)

2.2 案例

表字段
学号(主键)
课程号
姓名
学分

该表中存在两个事物:学生信息(学号对应学生姓名)、课程信息(课程号对应学分)。由于姓名依赖于学号,学分依赖于课程号,因此不符合第二范式。

2.2.1 该设计存在的隐患

  1. 数据冗余: 每条记录都含有相同信息(学分);
  2. 删除异常: 本想删除学生信息,但把课程信息也一并删除了;
  3. 插入异常: 学生没选课就无法录入信息到数据库;
  4. 更新异常: 更新学分,需要对所有含该课程的数据行进行学分更新操作。

2.2.2 如何设计

  1. 学生信息表
字段名
学号
姓名
  1. 课程信息表
字段名
课程号
学分
  1. 选课关系表
字段名
学号
课程号

三、第三范式

3.1 描述

3NF主要是关于字段的冗余性,其要求任何字段不能由其他字段派生出来,即存在传递依赖;

3.2 案例

表字段
学号
姓名
学院名称
学院电话

该表中存在传递依赖:学号 --> 学院名称 --> 学院电话,也就是无法通过学号直接得到学院电话;

3.2.1 该设计存在的隐患

  1. 数据冗余: 存在重复值(学院电话);
  2. 更新异常: 存在重复的冗余信息(学院电话),修改时需要同时修改多条数据。

3.2.2 如何设计

  1. 学生信息表
表字段
学号
姓名
学院名称
  1. 学院信息表
表字段
学院名称
学院电话

3.2.3 第三范式与第二范式的本质区别

  • 第二范式是指如果一张表中包含了多种不同实体的属性,那么就需要把不同的实体属性分离开形成多张表;
  • 第三范式是指已经分好了多张表,但一张表中只能有另一张表的ID(主键),而不能有其他的信息。(想要获取其他的信息,就要用相关的主键在另一张表中查询)。

转载地址:https://blog.csdn.net/dongli_1996/article/details/96487422 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Eclipse中使用Maven关联Spring源码包
下一篇:FC8下驱动TP-LINK 310G无线网卡

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月23日 21时04分40秒