对三范式与反范式用通俗的话解释
第一范式
- 第一范式:
列是不重复,字段不可分割,是完整的,同一列不能有多个值
,例如一个字段为学生,在这个字段里的值:张三,男,18。这是违反第一范式,应该修改为name、性别、年龄三个字段去报存这三个信息,也就是说一个字段就存一个数据,不是一串数据
反例:
正例:
第二范式
- 第二范式:第二范式必须依赖第一范式,
表中数据每一行应该有区别其他行的标识
,通常来说就是PK,默认主键,id等这个PK与整行数据具有直接关联,非主建字段完全依赖主键,也就是每行数据有主键
第三范式
- 第三范式:必须满足第二范式,
不能包含其他表中非主键字段
,也就是说用主键去做关联,比如用户信息表里不能直接把角色表的字段存起来,应该保存角色表的主键,也就是说表与表之间用id做关联关系
反范式
- 没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,提高读性能,就必须降低范式标准,
适当保留冗余数据
。 - 具体做法是: 在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。
降低范式就是增加字段,减少了查询时的关联,提高查询效率
,
因为在数据库的操作中查询的比例要远远大于DML的比例。但是反范式化一定要适度,并且在原本已满足三范式的基础上再做调整的
。