三范式:
- 1.第一范式(1NF):确保每一列的原子性(做到每列不可拆分)
- 2.第二范式(2NF):在第一范式的基础上,非主字段必须依赖于主字段(一个表只做一件事)
- 3.第三范式(3NF):在第二范式的基础上,消除传递依赖
解释说明:
第一范式:
比如用户表中有字段地址,我们在设计数据表的时候就不能直接给address 存入中国-北京。而是应该设计成国籍,城市两个字段,做到每列不可拆分就是这个意思
第二范式:
比如用户表中不能存入学生成绩信息,成绩信息应该用一张成绩表来保存,用id学生id关联两张表之间的关系
第三范式:
在第二范式的基础上,比如成绩表中有字段单价,数量与合计金额,我们在获取合计金额的时候就不能使用单价*数量的方式来得到,为什么呢,因为如果我们的订单表中有10000条数据,如果我们想得到合计金额就要服务器计算10000次,这时就太浪费我们的服务器了。
反三范式:(现代数据库设计新思想)
反三范式是基于第三范式所调整的,没有冗余的数据库未必是好的数据库,有时为了提高运行效率,就必须降低 范式标准,适当保留冗余数据。
- 例如:有用户表和公司表,用户表中有用户id,用户名称,公司id,如果想要查询用户,就需要先通过用户表与公司表的关联查询公司名称,在查出需要的用户信息,这样不就浪费我们的服务器资源了吗?
于是现在人们就想到对于一些查询量比较大的字段,同样放到一张表中,这样就可以提高我们的查询效率了,
总结
使用反三范式不代表着我们不需要遵守三范式,而是通过保留冗余字段来方便我们的查询
那么三范式与反三范式是怎么出现的呢?
因为计算机早期发展的时候硬盘存储比较昂贵,要尽可能的减少冗余字段的出现(以时间换空间),但是现在硬盘已经不再是稀缺资源了,于是便有了反三范式的出现(以空间换时间)