热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

mysql:三范式

第一范式(1NF)一个字段只存储一项信息第二范式(2NF)任意一个字段都只依赖表中的同一个字段。(涉及到

第一范式(1NF)

一个字段只存储一项信息

第二范式(2NF)

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

例如:学生选课表

学号课程成绩课程学分
10001数学1006
10001语文902
10001英语853
10002数学906
10003数学996
10004语文892

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

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

课程课程学分
数学6
语文3
英语2

第三范式(3NF)

表中的每一列都要与主键直接相关,而不是间接相关(表中的每一列只能依赖于主键)
如果某一属性依赖于其他非主键属性,而其他非主键属性又依赖于主键,那么这个属性就是间接依赖于主键,这被称作传递依赖于主属性。 通俗解释就是一张表最多只存两层同类型信息。

商品名称价格重量有效期分类分类描述
可乐6.00500g2020.6酒水饮料碳酸饮料
香蕉8.00600g2020.7生鲜食品水果

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

商品id商品名称价格重量有效期
1可乐6.00500g2020.6
2香蕉8.00600g2020.7

分类id分类分类描述
1酒水饮料碳酸饮料
2生鲜食品水果

分类id商品id
11
22

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

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


扩展:反三范式

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


推荐阅读
author-avatar
w3cbj.cn
w3c笔记,程序员专属笔记云平台,24种代码高亮!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有