范式

第一范式

  • 属于第一范式关系的所有属性都不可再分,即数据项不可分。

第二范式(2NF)

  • 要求数据库表中的每个实例或行必须可以被唯一地区分。
  • 也就是指禁止使用联合主键

第三范式(3NF)

  • 指每一个非主属性既不部分依赖于也不传递依赖于业务主键,也就是在第二范式的基础上消除了非主键对主键的传递依赖。

反范式设计

所谓反范式化就是为了性能和读取效率得考虑而适当得对数据库设 计范式得要求进行违反。允许存在少量得冗余,换句话来说反范式化就是使用空 间来换取时间。

范式化设计优缺点

  • 范式化的更新操作通常比反范式化要快。
  • 当数据较好地范式化时,就只有很少或者没有重复数据,所以只需要修 改更少的数据。
  • 范式化的表通常更小,可以更好地放在内存里,所以执行操作会更快。
  • 很少有多余的数据意味着检索列表数据时更少需要 DISTINCT 或者 GROUP BY 语句。在非范式化的结构中必须使用DISTINCT 或者 GROUPBY 才能获得一份唯 一的列表,但是如果是一张单独的表,很可能则只需要简单的查询这张表就行了。

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

反范式化设计优点

  • 反范式设计可以减少表的关联
  • 可以更好的进行索引优化

反范式设计缺点

  • 存在数据冗余及数据维护异常
  • 对数据的修改 需要更多的成本