三大范式
为什么需要数据规范化?
- 信息重复
- 更新异常
插入异常
- 无法显示正常信息
删除异常
- 丢失有效的信息
三大范式
第一范式(1NF)
原子性:保证每一列不可再分
学号 | 姓名 | 学历信息 |
---|---|---|
1 | 孙笑川 | 本科,大一 |
2 | 刘波 | 硕士,硕二 |
3 | Giao哥 | 博士,博三 |
根据第一范式规范后为
学号 | 姓名 | 学籍信息 |
---|---|---|
1 | 孙笑川 | 本科 |
2 | 刘波 | 硕士 |
3 | Giao哥 | 博士 |
姓名 | 年级信息 |
---|---|
孙笑川 | 大一 |
刘波 | 硕二 |
Giao哥 | 博三 |
第二范式(2NF)
前提:满足第一范式
每张表只做一件事
订单编号 | 商品名 | 单价 | 数量 | 订单金额 | 时间 |
---|---|---|---|---|---|
001 | 铅笔 | 1.00 | 10 | 10.00 | 20201101 |
002 | 橡皮擦 | 2.00 | 20 | 40.00 | 20201102 |
003 | 胶带 | 3.00 | 30 | 90.00 | 20201103 |
根据第二范式规范后为
订单编号 | 商品名 | 单价 | 数量 |
---|---|---|---|
001 | 铅笔 | 1.00 | 10 |
002 | 橡皮擦 | 2.00 | 20 |
003 | 胶带 | 3.00 | 30 |
订单编号 | 订单金额 | 时间 |
---|---|---|
001 | 10.00 | 20201101 |
002 | 40.00 | 20201102 |
003 | 90.00 | 20201103 |
第三范式(3NF)
前提:满足第一范式和第二范式
第三范式需要确保数据表中的每一列数据都和主键直接关联,而不能间接相关
学号 | 学生姓名 | 性别 | 班主任 | 班主任年龄 |
---|---|---|---|---|
001 | 孙笑川 | 男 | 李明 | 30 |
002 | 刘波 | 男 | 陈华 | 31 |
003 | Giao哥 | 男 | 刘丽 | 32 |
根据第三范式规范后为
学号 | 学生姓名 | 性别 | 班主任 |
---|---|---|---|
001 | 孙笑川 | 男 | 李明 |
002 | 刘波 | 男 | 陈华 |
003 | Giao哥 | 男 | 刘丽 |
班主任 | 班主任年龄 |
---|---|
李明 | 30 |
陈华 | 31 |
刘丽 | 32 |
规范性 与 性能的问题简要分析
关联查询的表不得超过三张
- 考虑商业化的需求和目标(成本,用户体验等),数据库的性能更加重要
- 在规范性能问题的时候,需要适当的考虑一下规范性
- 故意给某些表增加一些冗余字段(从多表查询变为单表查询)
- 故意增加一些计算列(从大数据量降低为小数据量的查询:索引)
评论 (0)