【SQL 必知必会】性能篇 03. 3NF有哪些不足,为什么要进行反范式设计

  • 一般表结构设计到第三范式就可以了,但是为什么还会有BCNF呢?
  • 为什么还需要进行反范式设计
  • 反范式设计的使用场景,以及存在的问题

1. 第三范式存在哪些不足

​​​​【SQL 必知必会】性能篇 03. 3NF有哪些不足,为什么要进行反范式设计_第1张图片

  1. 如果此时在表中增加一个新书名,但是没有插入作者名字,此时主属性作者为空,根据数据表的完整性要求,主键不为空,所以此时存在插入异常。
  2. 如果书名换了作者,可能会同时修改数据表中的多个记录。
  3. 如果删除某书,此时书号和书的作者也会被删除。

总结:即使满足三范式,也会存在增删改等异常情况。此时我们用到了BCNF范式。BCNF,也叫做巴斯 - 科德范式,它在 3NF 的基础上消除了主属性对候选键的部分依赖或者传递依赖关系。

2. 反范式设计

我们知道范式设计只会让表的数量越来越多,在数据表优化上,简化了数据的冗余。但是有冗余一定不好么?如果数据表越来越多,查询一条记录,需要多表联查,反而会增加查询效率。此时如果让数据表允许少量的冗余,通过空间换时间,也是查询优化的一种思想。

那么反规范设计有哪些适用场景呢?

  1. 当冗余信息有价值,或者能提高查询效率的时候可采用反规范化设计。
  2. 不经常增删改的数据表,可以进行反范式设计。
  3. 数据仓库的设计,可采用反范式设计,数据仓库主要用于存储历史数据,不经常进行增删改。

总结

范式与反范式设计没有优劣之分,只有更合适的说法,两者需要混合使用,范式与反范式设计是不是有点中庸之道的思想,好多东西都是这样,有利有弊,混合使用才是最大的利,不存在完美的设计,没有最好,只有最合适。
【SQL 必知必会】性能篇 03. 3NF有哪些不足,为什么要进行反范式设计_第2张图片

你可能感兴趣的:(【SQL 必知必会】性能篇 03. 3NF有哪些不足,为什么要进行反范式设计)