/ db

mysql-schema

范式与反范式

在范式化的数据库中,每个事实数据会出现且只出现一次。相反,在反范式化的数据库中,信息是冗余的,可能会存储在多个地方。

范式别名 —— 零冗余存储。
反范式别名 —— 冗余存储。

范式的优点和缺点

优点:

  • 更新快。
  • 修改数据简单。
  • 更小,更好地放在内存里,操作快。

缺点:范式化的 schema 的缺点是通常需要关联。稍微复杂一点的查询语句在符合范式化的 schema 上都可能需要至少一次关联,也许更多。这不但代价昂贵,也可能使一些索引策略无效。例如,范式化可能将列存放在不同的表中,而这些列如果在一个表中本可以属于同一个索引。

反范式的有点和缺点

反范式化的 schema 因为所有数据都在一张表中,可以很好地避免关联。

反范式化的 schema 将两张表的字段合并一下,并增加一个组合索引,就可以不通过关联写出高效的查询。

混用范式化和反范式化

完全的范式化和完全的反范式化 schema 都是实验室里才有的东西:在真实的世界中很少会这么极端地使用。在实际应用中经常需要混用。