范式
第一范式
- 属于第一范式关系的所有属性都不可再分,即数据项不可分。
第二范式(2NF)
- 要求数据库表中的每个实例或行必须可以被唯一地区分。
- 也就是指禁止使用联合主键
第三范式(3NF)
- 指每一个非主属性既不部分依赖于也不传递依赖于业务主键,也就是在第二范式的基础上消除了非主键对主键的传递依赖。
反范式设计
所谓反范式化就是为了性能和读取效率得考虑而适当得对数据库设 计范式得要求进行违反。允许存在少量得冗余,换句话来说反范式化就是使用空 间来换取时间。
范式化设计优缺点
- 范式化的更新操作通常比反范式化要快。
- 当数据较好地范式化时,就只有很少或者没有重复数据,所以只需要修 改更少的数据。
- 范式化的表通常更小,可以更好地放在内存里,所以执行操作会更快。
- 很少有多余的数据意味着检索列表数据时更少需要 DISTINCT 或者 GROUP BY 语句。在非范式化的结构中必须使用DISTINCT 或者 GROUPBY 才能获得一份唯 一的列表,但是如果是一张单独的表,很可能则只需要简单的查询这张表就行了。
范式化设计的缺点是通常需要关联。稍微复杂一些的查询语句在符合范式的 表上都可能需要至少一次关联,也许更多。这不但代价昂贵,也可能使一些索引 策略无效。例如,范式化可能将列存放在不同的表中,而这些列如果在一个表中 本可以属于同一个索引。
反范式化设计优点
- 反范式设计可以减少表的关联
- 可以更好的进行索引优化
反范式设计缺点
- 存在数据冗余及数据维护异常
- 对数据的修改 需要更多的成本