常用的范式有第一、第二、第三范式,通常来说,如果数据库表满足某一个层级的范式,那么它也满足前面所有层级的范式,比如,第三范式肯定满足第一、第二范式。如果一个关系数据库表的设计满足第三范式,通常可认为它是“范式化”的。

一般数据库表的设计满足第三范式即可,还有其他的范式,如第四范式、第五范式、DK范式、第六范式。

第一范式

第一范式是指数据库表的每一列(属性)都是不可分割的基本数据项,这就要求数据库的每一列都只能存放单一值,即实体中的某个属性不能有多个值或不能有重复的属性。

第二范式

它的规则是要求数据表里的所有数据都要和该数据表的主键有完全相依的关系;如果有哪些数据只和主键的一部分有关的话,就得把它们独立出来变成另一个数据表。

第三范式

第三范式的所有非键属性都只和候选键有相关性,也就是说所有非键属性互相之间应该是无关的。候选键指的是能够唯一标识一笔记录的属性的最小集合,一般我们所说的候选键指的就是主键。

反范式

反范式是试图通过增加冗余数据或通过分组数据来优化数据库读取性能的过程。在某些情况下,反范式是解决数据库性能和可伸缩性的极佳策略。

范式化的设计是在不同的有关系的表中存储不同的信息,如果需要查询信息往往需要连接多个表,如果连接的表很多,将会导致很多随机I/O,那么查询可能会非常慢

解决方法:

牢记一个准则,设计的数据库应该按照用户可能的访问路径、访问习惯进行设计,而不是严格地按照数据范式来设计