范式
数据库设计三大范式
范式的优缺点:
优点:范式可以避免数据冗余,减少数据库的空间,减轻维护数据完整性的麻烦。
缺点:按照范式的规范设计出来的表,等级越高的范式设计出来的表越多。当我们去查询一些数据,必然要去多表中去查询数据,这样查询的时间要比在一张表中查询中所用的时间要高很多。也就是说我们所用的范式越高,对数据操作的性能越低。
- 1NF:确保每列保持原子性,即列不能够再分成其他几列。简而言之,第一范式就是无重复的列。
- 2NF:确保表中的每列都和主键相关,首先要满足它是1NF,另外还需要包含两部分内容:一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。
- 3NF:确保每列都和主键列直接相关,而不是间接相关。在1NF基础上,任何非主属性不依赖于其它非主属性[在2NF基础上消除传递依赖]。第三范式(3NF)是第二范式(2NF)的一个子集,即满足第三范式(3NF)必须满足第二范式(2NF)。
数据库的反范式设计
不满足范式的模型,就是反范式模型。
反范式跟范式所要求的正好相反,在反范式的设计模式,我们可以允许适当的数据的冗余,用这个冗余去取操作数据时间的缩短。本质上就是用空间来换取时间,把数据冗余在多个表中,当查询时可以减少或者是避免表之间的关联;
RDBMS(关系数据库管理系统)模型设计过程中,常常使用范式约束我们的模型,但在NOSQL模型中则大量采用反范式。
思考
为什么?
我之前并没有理论的学习过数据库的基础知识,对范式的了解也只是基于碎片化学习而来。最近重新关注这方面内容主要是因为一个项目,用 Navicat 看我最初的表表结构完全是一团乱。
这是我才反应过来数据库设计不是自己想象中的那么简单。
然后按照我理解的范式重新设计了表。但是到这儿我就想了解更多关于范式的知识,找到了一本书【数据库技术与应用】冯凤娟著,打算深入了解下。
最终还是数学
从数据库的部分依赖,完全依赖,传递依赖以及三种范式 这篇文章中我了解到【函数依赖】这个词,最终发现我要找的答案其实是数学。
然后某宝上找到了【数据库技术与应用】这本书。我打算系统的学习下相关基础知识。
数学随想
学科的觉醒?
封建社会觉醒的是文学(文科)!
第一次工业革命觉醒的是物理!
第二次工业革命觉醒的是电气(化学?)!
第三次工业革命觉醒的是信息(数学)!
……
满满的套路?