
mysql:三范式
发布日期:2021-05-04 18:49:08
浏览次数:12
分类:技术文章
本文共 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的比例。但是反范式化一定要适度,并且在原本已满足三范式的基础上再做调整的。
发表评论
最新留言
关注你微信了!
[***.104.42.241]2025年03月25日 00时58分44秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
结构化方法
2019-03-03
无线网络技术
2019-03-03
项目预算的组成
2019-03-03
帕累托图
2019-03-03
Dockerfile构建Python3.5环境---亲测可行代码
2019-03-03
LaTex 自动生成IEEE格式的参考文献
2019-03-03
编写测试用例的实用小技巧
2019-03-03
c语言贪吃蛇控制台版
2019-03-03
Windows10 下springboot应用无法被外部网络访问
2019-03-03
对象和封装
2019-03-03
同时在写四门编程语言是怎样一种体验?
2019-03-03
【背包dp】P5020 货币系统
2019-03-03
【树形dp】P1273 有线电视网
2019-03-03
【分层图最短路】P4568 [JLOI2011]飞行路线
2019-03-03
【最短路】P4408 [NOI2003]逃学的小孩
2019-03-03
回文自动机
2019-03-03
2020C证(安全员)模拟考试题及C证(安全员)模拟考试系统
2019-03-03