数据库设计三范式的通俗解释
发布日期:2022-02-22 18:04:21
浏览次数:17
分类:技术文章
本文共 901 字,大约阅读时间需要 3 分钟。
一、第一范式
1.1 描述
1NF主要是关于属性的原子性,要求属性具有原子性,不可再分解
1.2 案例
学生表字段 |
---|
学号 |
姓名 |
性别 |
出生年月 |
表中的出生年月字段,如果认为其还能再细分为:
出生年月 |
---|
年份 |
月份 |
这样的话,出生年月字段就不符合原子性,那就不是第一范式。不能再细分的话,就符合第一范式。
二、第二范式
2.1 描述
2NF主要是关于记录的唯一性,要求表中实体的唯一性,即不存在部分依赖(表中所有非主键字段都必须依赖主键)
2.2 案例
表字段 |
---|
学号(主键) |
课程号 |
姓名 |
学分 |
该表中存在两个事物:学生信息(学号对应学生姓名)、课程信息(课程号对应学分)。由于姓名依赖于学号,学分依赖于课程号,因此不符合第二范式。
2.2.1 该设计存在的隐患
- 数据冗余: 每条记录都含有相同信息(学分);
- 删除异常: 本想删除学生信息,但把课程信息也一并删除了;
- 插入异常: 学生没选课就无法录入信息到数据库;
- 更新异常: 更新学分,需要对所有含该课程的数据行进行学分更新操作。
2.2.2 如何设计
- 学生信息表
字段名 |
---|
学号 |
姓名 |
- 课程信息表
字段名 |
---|
课程号 |
学分 |
- 选课关系表
字段名 |
---|
学号 |
课程号 |
三、第三范式
3.1 描述
3NF主要是关于字段的冗余性,其要求任何字段不能由其他字段派生出来,即存在传递依赖;
3.2 案例
表字段 |
---|
学号 |
姓名 |
学院名称 |
学院电话 |
该表中存在传递依赖:学号 --> 学院名称 --> 学院电话,也就是无法通过学号直接得到学院电话;
3.2.1 该设计存在的隐患
- 数据冗余: 存在重复值(学院电话);
- 更新异常: 存在重复的冗余信息(学院电话),修改时需要同时修改多条数据。
3.2.2 如何设计
- 学生信息表
表字段 |
---|
学号 |
姓名 |
学院名称 |
- 学院信息表
表字段 |
---|
学院名称 |
学院电话 |
3.2.3 第三范式与第二范式的本质区别
- 第二范式是指如果一张表中包含了多种不同实体的属性,那么就需要把不同的实体属性分离开形成多张表;
- 第三范式是指已经分好了多张表,但一张表中只能有另一张表的ID(主键),而不能有其他的信息。(想要获取其他的信息,就要用相关的主键在另一张表中查询)。
转载地址:https://blog.csdn.net/dongli_1996/article/details/96487422 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2024年04月23日 21时04分40秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
PHP使用curl_multi_add_handle并行处理
2019-04-27
NP问题
2019-04-27
AT&T与Intel汇编语言的比较
2019-04-27
javascript解析json
2019-04-27
WinDbg安装与使用
2019-04-27
推荐阅读的多核编程技术书籍
2019-04-27
维基百科上的算法和数据结构链接很强大
2019-04-27
选择排序
2019-04-27
PHP session回收机制
2019-04-27
最新的全球编程语言,操作系统,web服务器等使用率分析报告
2019-04-27
用C语言写PHP扩展
2019-04-27
PHP Extension programming
2019-04-27
海量数据处理
2019-04-27
PHP防止注入攻击
2019-04-27
多路IO复用模型 select epoll 等
2019-04-27
Linux Epoll介绍和程序实例
2019-04-27
output_buffering详细介绍
2019-04-27
php缓冲 output_buffering和ob_start
2019-04-27
php error_reporting 详解
2019-04-27
剖析PHP中的输出缓冲
2019-04-27