博客
关于我
mysql:三范式
阅读量:263 次
发布时间:2019-03-01

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

第一范式(1NF)

一个字段只存储一项信息

第二范式(2NF)

任意一个字段都只依赖表中的同一个字段。(涉及到表的拆分)

例如:学生选课表

学号 课程 成绩 课程学分
10001 数学 100 6
10001 语文 90 2
10001 英语 85 3
10002 数学 90 6
10003 数学 99 6
10004 语文 89 2

表中成绩、课程学分依赖学号和课程,课程学分还依赖课程,这就不满足第二范式,需要拆表:

学号 课程 成绩
10001 数学 100
10001 语文 90
10001 英语 85
10002 数学 90
10003 数学 99
10004 语文 89
课程 课程学分
数学 6
语文 3
英语 2

第三范式(3NF)

表中的每一列都要与主键直接相关,而不是间接相关(表中的每一列只能依赖于主键)

如果某一属性依赖于其他非主键属性,而其他非主键属性又依赖于主键,那么这个属性就是间接依赖于主键,这被称作传递依赖于主属性。 通俗解释就是一张表最多只存两层同类型信息。

商品名称 价格 重量 有效期 分类 分类描述
可乐 6.00 500g 2020.6 酒水饮料 碳酸饮料
香蕉 8.00 600g 2020.7 生鲜食品 水果

首先这个是不满足第二范式,先拆成满足第二范式:

商品id 商品名称 价格 重量 有效期
1 可乐 6.00 500g 2020.6
2 香蕉 8.00 600g 2020.7
分类id 分类 分类描述
1 酒水饮料 碳酸饮料
2 生鲜食品 水果
分类id 商品id
1 1
2 2

这样的话就是满足了第二范式的前提下,也满足了第三范式,因为 表中的每一列都要与该表主键直接相关,而不是间接相关

第二范式是说一张表中包含了多种不同实体的属性,那么必须要分成多张表,第三范式是要求已经分好了多张表的话,一张表中只能有另一张标的ID,而不能有其他任何信息,(其他任何信息,一律用主键在另一张表中查询)。

扩展:反三范式

没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,提高读性能,就必须降低范式标准,适当保留冗余数据。具体做法是: 在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,减少了查询时的关联,提高查询效率,因为在数据库的操作中查询的比例要远远大于DML的比例。但是反范式化一定要适度,并且在原本已满足三范式的基础上再做调整的。

转载地址:http://wlpo.baihongyu.com/

你可能感兴趣的文章
商务蓝色六边形svg动态网站404页面源码
查看>>
简洁仿t猫404页html源码
查看>>
校园网跑腿小程序源码 小程序+服务端+客户端
查看>>
2021-05-03
查看>>
百度富文本编辑器UEditor指南-Array-专题视频课程
查看>>
OpenGL Sharders(着色器) 入门
查看>>
OpenGL 自定义着色器(Shaders)
查看>>
Android studio_像IDEA的代码分析结果(problmes栏)描述和错误定位/优化定位(替代方案)
查看>>
Python九齿耙(Ninerake)数据采集大数据深度学习智能分析爬虫软件的正则表达式规则简介
查看>>
Delphi 10.3 Rio的RadioGroup1控件如何设置 Items 的排列为横向横排水平显示
查看>>
Delphi 10.3 应用程序获取自身所在的目录文件夹名称
查看>>
Delphi SQL 查询数据表中规定的时间段内按天统计出每天的记录数
查看>>
从Android JAR文件创建Delphi接口的第三方工具
查看>>
Python学习笔记
查看>>
Kotlin实现冒泡排序
查看>>
C#控制台冒泡程序
查看>>
NodeJS下TypeScript环境安装
查看>>
论如何找tensorflow的源码
查看>>
Promise封装ajax请求
查看>>
修改Promise对象的状态的方式
查看>>