1 第一范式 该范式是为了排除 重复组 的出现,因此要求数据库的每个列的值域都由原子值组成;每个字段的值都只能是单一值。1971年埃德加·科德提出了第一范式。即表中所有字段都是不可再分的。 1.1 实例 重复组通常会出现在会计账上,每一笔记录可能有不定个数的值。
1.2 解决方案
即标准的二维表结构。 2 第二范式
表中必须存在业务主键,并且非主键依赖于全部业务主键。 2.1 实例 如下博客表
一个用户会对应多个博客记录,且章节标题也能为多个用户所编辑,所以单列字段PK失效
用户积分字段只和用户字段依赖,并不依赖整体的PK,依旧不符第二范式 2.2 解决方案 拆分将依赖的字段单独成表 从上面可发现:
3 第三范式 表中的非主键列之间不能相互依赖 3.1 实例 - 课程表 一个字段的PK显然符合第二范式,大部分字段也只依赖PK。然而对于职位字段其实依赖讲师名,所以不符合第三范式。 3.2 解决方案
4 三范式评价 优点
缺点
毕竟阿里规范提到 5 反范式(空间换时间) 反范式的过程就是通过冗余数据来提高查询性能,但冗余数据会牺牲数据一致性 优点
缺点
在企业中很好能做到严格意义上的范式成者反范式,一般需混合使用。 6 综合案例
范式设计
用户ID、姓名、电话、地址、邮箱
订单ID、用户ID、下单时间、支付类型、订单状态
订单ID、商品 ID、商品价格
商品ID、名称、描述、过期时间
反范式设计
用户ID、姓名、电话、地址、邮箱
订单ID、用户ID、下单时间、支付类型、订单状态、订单价格、用户名、电话、地址
订单ID、商品 ID、商品数量、商品价格
商品ID、名称、描述、过期时间
把用户表的地址加到了订单表,这样查询地址时,就不需要把用户表和订单表关联 |
|
来自: 千锋Python学堂 > 《Python基础教程分享》