前言:
王珊教授 - 《数据库系统概论》
范式 - 表结构设计标准的级别
常规范式: 1NF , 2NF , 3NF, BCNF, 4NF, 5NF
意义: 为了消除重复数据,减少冗余数据,让我们数据表有更好的组织关系
特点: 符合高级范式的设计,必定符合其低级的范式设计;
1NF: 字段是最小单元 且 不可再分
错:
| id | 联系人 | 联系地址 |
| ---- | ------ | ------------------------------------ |
| 1 | 周轩 | 西伯利亚 12345678910 |
有点对:
| id | 联系人 | 联系人电话 | 联系人地址 |
| ---- | ------ | ---------- | ------------------------ |
| 1 | 周轩 | 12345678910 | 西伯利亚 |
非常对:
| id | 联系人 | 联系人电话 | 省 | 市 | 区 | 地址 |
| ---- | ------ | ---------- | ---- | ---- | ------ | ------------ |
| 1 | 周轩 | 112345678910 | 西伯利亚 | 西伯利亚 | 西伯利亚 | 西伯利亚33号 |
疑问? 仅仅符合第一范式, 是否就可以了?
| 商品id | 商品名称 | 分类号 | 分类名 | 价格 | 仓库 | 仓库负责人 |
| ------ | -------- | ------ | ------ | ---- | ---- | ---------- |
| 1 | 茜茜6代 | 1 | 双肩 | 100 | A | 周轩 |
| 1 | 茜茜6代 | 2 | 单肩 | 80 | A | 周轩 |周轩 |
更新异常: 将茜茜6代 改名为 茜茜限量版, 工作人员要改两次
插入异常: 设计部出了 茜茜7代,但是市场部还没定价,插入第三条 ‘脏数据’
2NF : 满足1NF , 表中字段必须完全依赖于 全部主键 而非部分主键
上表中 主键【商品id&品类号】
案例: 如果只想获得分类名, 已知分类号即可, 即产生了部分依赖
表1 商品表
| 商品id | 商品名称 | 仓库 | 仓库负责人 |
| ------ | -------- | ---- | ---------- |
| 1 | 茜茜6代 | A | 周轩|
表2 分类表
| 分类id | 分类名 |
| ------ | ------ |
| 1 | 双肩 |
| 2 | 单肩 |
表3 定价表
| 商品id | 分类id | 定价 |
| ------ | ------ | ---- |
| 1 | 1 | 100 |
| | 2 | 80 |
疑问: 符合2NF之后,还会不会有问题
3NF:满足2NF, 非主键外得所有字段必须互不依赖,即非主键字段不能有传递性依赖
商品id -> 商品名称 ->仓库->仓库负责人
仓库 - > 仓库负责人
1,商品表
| 商品id | 商品名 | 仓库 |
| ------ | ------- | ---- |
| 1 | 茜茜6代 | B |
2,仓库表
| 仓库ID | 负责人 |
| ------ | ------ |
| A | 周轩 |
| B | 阿泽 |
定义:一定程度上的违反范式,可以带来有效收益
场景1, 规避复杂的聚合操作,提高统计效率
疑问1:统计一下 每个分类的总销量;
1,方案1 定价表设置销量字段,聚合统计每款分类的总销量 - 聚合
2,方案2 总分类表上,设置总销量字段,每卖出一款,对应+1 - 无需聚合 - 增加一定字段上的冗余更优
场景2, 一定程度上的数据冗余,便于还原数据的真实性
疑问1: 订单表中的地址,该如何存
表1 地址表
| id | 联系人 | 联系人电话 | 省 | 市 | 区 | 地址 |
| ---- | ------ | ---------- | ---- | ---- | ------ | ------------ |
| 1 | 周轩 | 112345678910 | 西伯利亚 | 西伯利亚 | 西伯利亚 | 西伯利亚33号 |
表2 订单表
| 订单id | 订单商品 | 地址id |
| ------ | -------- | ------ |
| 1 | 茜茜6代 | 1 |
场景: 我于2020年2月14日 买了一款 茜茜6代 双肩款 寄到了 西伯利亚 西伯利亚33号
我于2020年2月15日 在西伯利亚收货
我于2020年3月15日,将我的地址1 从 西伯利亚修改到了天津
请问: 我现在去查 2月14日下的订单【茜茜6代】,该订单收获地址是哪里 -> 天津
| 订单id | 订单商品 | 省 | 市 | 区 | 地址 | 联系人 |
| ------ | -------- | ---- | ---- | ---- | ---- | ------ |
| | | | | | | |