数据库三大范式与反三范式

1.范式其实是指就是规范的意思,英文Normal form,简称NF,目的,范式可以避免数据冗余,减少数据库的空间,减轻维护数据完成性的麻烦.

2.只有关系型数据库才存在范式,总共有1NF,2NF,3NF,BCNF,4NF,5NF,DKNF,6NF,用的最多的就是1NF,2NF,3NF.

3.第一范式(1NF)表中的列不可分割,具有原子性

4.第二范式(2NF)在1NF的基础上,有主键,非主键列需要完全依赖于主键,不能只依赖于逐渐的一部分

5.第三范式(3NF)咋2NF的基础上,非主键需要直接依赖于主键,不能存在依赖传递,即不能存在:非主键列A依赖于非主键列B,非主键B依赖于主键的情况.

6.反三范式, 故名思义,跟范式所要求的正好相反,在反范式的设计模式,我们可以允许适当的数据的冗余,用这个冗余去取操作数据时间的缩短。也就是利用空间来换取时间,把数据冗余在多个表中,当查询时可以减少或者是避免表之间的关联;

简要回答

1.1NF,列不可拆分,具有原子性

2.2NF,满足1NF,有主键,非主键需要完全的依赖主键,不能依赖部分

3.3NF.满足2NF,非主键需要直接依赖主键,不能传递依赖

4.反三范式就是通过该增加冗余,聚合的手段来提升性能

辅助理解

1. 第一范式

假如有张表有一列所在地,可分割为省、市,这样就不符合1NF;
在这里插入图片描述
应该拆分为:
在这里插入图片描述

2.第二范式

假如有一张订单表,产品数量、产品折扣、产品价格和订单号、产品号都有依赖,订单金额和订单时间只和订单号有依赖,要完全依赖,这样就不符合第二范式。
数据库三大范式与反三范式_第1张图片
应该分为订单表和订单详情表,用一对多去解决。
数据库三大范式与反三范式_第2张图片

3.第三范式

假如有一张学生表,所有属性都完全依赖于学号,所以满足第二范式,但是“班主任性别”和“班主任年龄”直接依赖的是“班主任姓名”,而不是主键学号,如下:
数据库三大范式与反三范式_第3张图片
需要做如下调整:
数据库三大范式与反三范式_第4张图片

4.反三范式

没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,提高读性能,就必须降低范式标准,适当保留冗余数据。

具体做法是: 在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,减少了查询时的关联,提高查询效率,因为在数据库的操作中查询的比例要远远大于DML的比例。但是反范式化一定要适度,并且在原本已满足三范式的基础上再做调整的。

你可能感兴趣的:(数据库三大范式与反三范式)