1.定义

三范式是数据库的规范化的内容,所谓的数据库三范式通俗的讲就是设计数据库表所应该遵守的一套规范,如果不遵守就会造成设计的数据库不规范,出现数据库字段冗余,数据的查询,插入等操作等问题。

注意:数据库不仅仅只有三范式(1NF/2NF/3NF),还有BCNF、4NF、5NF…,不过在实际的数据库设计时,遵守前三个范式就足够了。再向下就会造成设计的数据库产生过多不必要的约束。

2.数据库的三范式内容及详解

第一范式:数据库表中的每一列都不可再分,也就是原子性

解释:如下表所示,可以看到,列部门岗位是不满足原子性的要求的。所谓原子就是最小的。不能再把它进行划分了。在部门岗位中,是可以进行划分为部门和岗位的。


修改后的表:

第二范式:在满足第一范式基础上要求每个字段都和主键完整相关,而不是仅和主键部分相关(主要针对联合主键而言)

第二范式的另一种表述方式是:两张表要通过外键关联,不保存冗余字段。

注意:如果不是联合主键(两个字段共同充当表的主键),不存在不遵守第二范式的问题。

解释:如下表:

直接看这个表可能第一感觉就是没毛病。但是当一个表中出现联合主键时,我们就需要进行详细的分析了。
“订单详情表”使用“订单编号”和“产品编号”作为联合主键。此时“产品价格”、 “产品数量”都和联合主键整体相关,但 “订单金额”和“下单时间” 只和联合主键中的“订单编号”相关,和“产品编号”无关。所以只关联了主键中的部分字段,不满足第二范式。

修改表如下:把“订单金额”和“下单时间”移到订单表就符合第二范式了。

第三范式:表中的非主键字段和主键字段直接相关,不允许间接相关


上面表中的“部门名称”和“员工编号”的关系是“员工编号”→“部门编号” →“部门名称”,不是直接相关。此时会带来下列问题:
1.数据冗余:“部门名称”多次重复出现。
2.插入异常:组建一个新部门时没有员工信息,也就无法单独插入部门信息。就算强行插入部门信息,员工表中没有员工信息的记录同样是非法记录。
3. 删除异常:删除员工信息会连带删除部门信息导致部门信息意外丢失。
4.更新异常:哪怕只修改一个部门的名称也要更新多条员工记录。

正确的方式:把上表拆分成两张表,以外键形式关联

3.实际开发中注意事项

三大范式是设计数据库表结构的规则约束,但是在实际开发中允许局部变通。

如何变通呢?

比如为了快速查询到关联数据可能会允许冗余字段的存在。例如在员工表 中存储部门名称虽然违背第三范式,但是免去了对部门表的关联查询。

根据业务功能设计数据库表

1).看得见的字段
能够从需求文档或原型页面上直接看到的数据都需要设计对应的数据库表、字段来存储。例如设计一个登录界面的功能。设计表需要有账号、密码。

2).看不见的字段
除了能够直接从需求文档中看到的字段,实际开发中往往还会包含一 些其他字段来保存其他相关数据。 例如主键、创建账户时间。

3).冗余字段
为了避免建表时考虑不周有所遗漏,到后期再修改表结构非常麻烦, 所以有时会设置一些额外的冗余字段备用。

数据库的三范式详细解释相关推荐

  1. 数据库设计三范式详细介绍--数据库设计规范之数据库设计三范式

    为什么需要数据库设计 1. 我们在设计数据表的时候要考虑很多问题问题,比如: 用户都需要什么数据?需要在数据表中保存哪些数据? 如果保证数据表中数据的正确性,当插入.删除.更新的时候该进行怎么样的约束 ...

  2. [数据库03]-约束(唯一性-主键-外键/存储引擎/事务/索引/视图/DBA命令/数据库设计三范式

    [数据库03]-约束(唯一性-主键-外键)/存储引擎/事务/索引/视图/DBA命令/数据库设计三范式 一.约束 1.1 唯一性约束(unique) 1.2 主键约束 1.3 外键约束 二.存储引擎 2 ...

  3. MySQL之数据库设计三范式

    目录 一.简介 第一范式 第二范式 第三范式 结语 学习计划: 一.简介   我们数据库表设计的时候需要尽可能的遵循三范式,具体是 第一范式(1NF): 强调的是列的原子性,即列不能够再分成其他几列, ...

  4. 数据库的三范式及BC范式

    数据库的三范式及BC范式 依赖 三范式 第一范式(1NF):唯一性,数据列不可再分割 第二范式(2NF):唯一性,消除非主键元素/列对组合主键中部分元素/列的依赖 第三范式(3NF):独立性,消除传递 ...

  5. 数据库设计三范式的举例及四大特性说明

    更多免费教学文章请关注这里 前言 数据库课本上都把范式写到五范式了,但是实际应用中,满足三范式已经足够了,五范式太多余了. 三种范式是条件递增的联系(即后一个范式是在前一个条件满足的情况下引入新的条件 ...

  6. MySQL——数据库设计三范式

    0.数据库设计范式 设计范式是数据库表的设计依据,如何进行数据库表的设计. 设计数据库表时按照三范式进行,可以避免表中数据的冗余,空间的浪费. 1.第一范式 要求任何一张表必须有主键,每一个字段原子性 ...

  7. 数据库(三范式,视图,事务隔离级别,存储过程)

    MySQL设计三范式的理解 目前关系数据库有六种范式: 第一范式(1NF).第二范式(2NF).第三范式(3NF).巴斯-科德范式(BCNF).第四范式(4NF)和第五范式(5NF,又称完美范式).满 ...

  8. MySQL面试题 数据库设计三范式

    第一范式 属性(字段)的原子性约束,要求属性具有原子性,不可再分割: 比如个人信息,个人信息不能作为一个字段,它可以再分为姓名.name.age等: 第二范式 记录的惟一性约束,要求记录有惟一标识,每 ...

  9. 深入浅出数据库设计三范式

    设计良好结构的数据库,可以有效减小数据冗余,减少增删改中出现的问题.深入理解数据库设计的三范式,对于设计"健壮的数据库"十分有必要.数据库三范式是设计数据库 时参考的准则,接下来我 ...

最新文章

  1. python创建对象的格式为_Python入门基础学习(面向对象)
  2. MATLAB实战系列(二十一)-基于遗传算法的BP神经网络优化算法(附MATLAB代码)
  3. LINK:fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
  4. ssl提高组周三备考赛【2018.10.17】
  5. 关于window.history.back()后退问题
  6. linux退出windows域,删除Windows AD域控制器的三种方法
  7. HTML5 canvas 模拟事件
  8. 输出1-10之间的偶数,并统计奇数的个数
  9. 如何安装和使用Android夜神模拟器
  10. 【智慧城市】GIS数据获取-获取道路/水路数据
  11. Java基础~Java ASCII码的转换
  12. pnp型三极管 饱和 截至_截至2013年核心Java帖子
  13. Oracle索引原理
  14. 带下拉菜单截图 巧用PrtSc截图键
  15. 8086CPU(汇编语言,王爽)
  16. java .getbytes_java中String的getBytes方法使用
  17. most_common()函数源码解读
  18. hdu4699(对顶栈模拟+简单dp)
  19. 【智能家居】空调遥控器破解
  20. Teambition X 2019 校招

热门文章

  1. OSChina 周四乱弹 ——乱弹倒计时二篇
  2. os “抖动”与工作集
  3. 超星图书压缩专用脚本程序
  4. sfc 修复 xp rpc服务器,我来告诉大家一些无耻的电脑知识(很牛逼很震撼,怕用的时候找不到...
  5. 实现提交表单前先勾选复选框,判断复选框状态
  6. Java基础篇——字符串处理(String,StringBuffer,StringBuild)
  7. 到底什么是浏览器的热更新?(webpack版)
  8. Java Review - 线程池使用FutureTask的小坑
  9. python 获取二进制图片数据及判断得到图片类型
  10. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java高校物资捐赠管理系统0e45o