02.2 数据库三范式

了解数据库三范式

认识范式

会逐渐体会到一个设计合理的模型结构是多么的重要了解范式理论,有助于在建模过程中识别并纠正不合理的结构,防患于未然

第一范式(1NF):列的原子性,保证表的每一列都是不可分割的原子项

编号 姓名 性别 所在地
0001 张三 广东省,深圳市
0002 李四 海南省,海口市

所在地| 编号 | 姓名 | 性别 | 所在省 | 地市 | | —- | —- | —- | —- | —- | | 0001 | 张三 | 男 | 广东省 | 深圳市 | | 0002 | 李四 | 女 | 海南省 | 海口市 |

第二范式(2NF):在1NF的基础上,非关键字段必须依赖唯一的主键

工牌编号 工牌姓名 饭卡编号 饭卡姓名 饭卡余额
0001 张三 A001 A1号员工 100
0002 李四 B001 B1号员工 80

第三范式(3NF):在2NF的基础上,表中的每一列都和主键直接相关,不能存在传递依赖

用户编号 姓名 性别 城市 城市人口
0001 张三 深圳市 1300W
0002 李四 海口市 230W

范式设计的问题和对策

达到空间换时间的目的

  • 性能考虑,没有任何冗余的模型会产生更多的Join查询。在一些实时交互的系统中,可能会拖慢报表响应。
  • 成本收益,范式设计提出于20世纪,当时的磁盘存储成本较高,随着科技的进步,数据压缩比越来越高,存储的成本也显著降低,采用这种设计的成本收益已经不是那么明显。
  • DAX的Auto Exists现象,也要求适当保留冗余数据,这个问题我们会在接下来的文章中专门讨论。

模型的规范化与反规范化