规范化是组织数据库数据的过程。其目的是通过分解数据库表,消除数据冗余、确保数据一致性和完整性。规范化的过程通常分为多个阶段,称为“范式”(Normal Forms)。
第一范式(1NF)
每一列都是不可分割的基本数据项,不包含重复的列。
在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。
例如:学生信息表中记录学生的选课信息,一个学生可能选了多门任选课:
这样的数据库是不符合第一范式的,应该将选修课信息单独存放在选课信息表中,使用学生ID将选修课信息和学生信息关联起来
⚠️不满足第一范式会存在数据冗余
第二范式(2NF)
在1NF的基础上,非主键列完全依赖于主键,而不是依赖于主键的一部分。
例如下表:
该表的关键字为(学生ID, 课程号),但是存在以下依赖:
(课程)→ (任课教师)
(学生ID)→(学生姓名. 专业, 学院)
存在非主属性部分依赖关键字的情况
⚠️不满足第二范式会存在如下问题:
- 数据冗余
- 一个学生需要学习n门课程,学生信息就在表中重复出现n次,一门课程有m个同学需要学习,则课程信息就在表中重复m次
- 数据不一致
- 更新异常
- 如果调整了某学生的专业或某个课程的任课老师发生了变化,需要在表中同时更新n条数据
- 插入异常
- 假设需要开设新的课程,该课程还没有学生需要学习,那么该课程的信息无法插入数据库
- 删除异常
- 删除学生信息时,课程信息也会一起被删除
- 更新异常
第三范式(3NF)
在2NF的基础上,消除非主键列之间的传递依赖,即任何非主键列都不依赖于其他非主键列
例如:
表中存在如下传递依赖:学生ID → 专业 → 学院,因此不满足第三范式
⚠️不满足第三范式会出现:
- 数据冗余
- 数据不一致
- 缺少数据完整性约束
- 修改专业信息时会导致学院信息错误
巴斯-科德范式(BCNF)
在3NF基础上,消除主属性对候选码的部分函数依赖和传递函数依赖
例如:
有如下依赖关系:
(仓库ID, 存储物品ID) →(管理员ID, 数量)
(管理员ID, 存储物品ID) → (仓库ID, 数量)
所以,(仓库ID, 存储物品ID)和(管理员ID, 存储物品ID)都是候选关键字,表中的唯一非关键字段为数量,符合第三范式。但是,由于存在如下决定关系:
(仓库ID) → (管理员ID)
(管理员ID) → (仓库ID)
仓库ID是决定因素,但仓库ID不包含候选键。
同样的,管理员ID也是决定因素,但不包含候选键。
所以该表不满足BCNF。
⚠️不满足BCNF会出现:
- 数据冗余
- 数据不一致
- 缺少数据完整性约束
参考:
数据库规范化说明 - Microsoft 365 Apps | Microsoft Learn
数据库设计之规范化--------几种范式详解_如何对数据库进行规范化设计-CSDN博客
[学习笔记]数据库设计三大范式与BCNF,学习笔记 - ybwang1989 - 博客园
到此这篇数据库新手教程(数据库新手教程pdf)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/sjkxydsj/11331.html