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现象,也要求适当保留冗余数据,这个问题我们会在接下来的文章中专门讨论。
模型的规范化与反规范化