数据库设计三范式概述
第一范式
:
# 确保每一列的原子性:
意思就是每一列字段都不可以拆分。
例如我们有一个字段:
地区
重庆市沙坪坝区
那么这个字段是可以被拆分的,所以不满足第一范式,怎么拆分呢:
市/省 区
重庆 沙坪坝区
所以第一范式的要求就是,*保证每一列字段都不可以重复*。
第二范式
:
# 在第一范式的基础上,非主字段必须依赖于主字段
简单的理解就是,一个表只做一件事,你用户表不要来带有该用户的角色名称等不依赖于主字段的信息信息。
第三范式
:
# 在第二范式的基础上,消除传递依赖
比如现在有两张表,user表和role表
user:
id name rid rname
1 张三 1 管理员
role:
id name
1 管理员
这个表很简单,user依赖于role表,但是我们要注意,我们依赖于role表只需要一个role的id就可以了,可这里却带有了role的name字段,这就是传递依赖,这种方式是不被第三范式认可的。
备注
:
就第三范式而言,如果某些依赖的字段查询的频率非常高,如果按照第三范式的规则来的话,那么每次查询都需要多表查询,这就浪费了效率,那么这个时候我们就可以仍然使用这些冗余字段以提高查询效率,那么这就是反三范式,所以我们设计数据库的时候,三范式固然有参考价值,但不可当作唯一标准,要灵活运用,设计出实用、高校、易维护的数据库才是王道。