数据库中范式和反范式
在范式化的数据库中,每个事实数据会出现在并且只会出现一次。相反,在反范式化数据库中,可能会存储在多个地方。
这里有一张简单的表,分别存储“学生,班级,班主任”:
这个表的问题是修改数据时出现问题。假如这个时候由Mr.Huang来担任01班班主任,那么这个时候需要修改多行数据来反应这个变化。这个时候我们需要对表进行范式化,将学生和班级作为一张表进行维护,班级和班主任作为一张表进行维护:
student_class表:
class_teacher表:
这样设计的表符合第二范式,并且降低了修改数据对表的影响。
**
范式的优点和缺点:
- 范式化结构通常比反范式化结构更新要快
- 当数据较好的范式化时,只有少量重复的数据,所以只需修改少量数据
- 范式化的表通常较少,可以更好的放在内存之中,所以执行操作会更快
- 非范式化的结构需要使用DISTINCT或则GROUP BY才能获得所有的班级列表(class),而范式化的结构可以直接获取班级列表(class_teacher).
- -
反范式的优点和缺点:
- 反范式结构的数据都在一张表中,可以很好的避免关联
- 当数据比内存大时单表查询比关联查询要快得多,这样避免了随机I/O
*