理解三大范式
第一范式
- 每一列的数值不可再分,确保每一列的原子性。
在一个表中,有一个 computer 列,用于存储一个公司员工的设备,有的可能有一台电脑,有的可能会有多个。所以这个列就会有多个可能的值,则其没有原子性还可以再次拆分。
解决方法:
可以新建一个表专门存储 computer 的数据,而不是在原来的表后面加上 computer2 的列。
第二范式
- 每一个非主键列都必须依赖于整个主键组合。只有当主键为组合键的时候才会考虑第二范式,单一主键一定满足第二范式。
在一个表中可能会有多个主键,只有非主键列都只能被该表中所有主键的组合所确定才能说满足第二范式。如果有一列可以只由单个或非所有主键确定,则其不满足。
解决方法:
可以去掉非所有主键确定的列,用一个新的表存储,或者改变主键的组合,使所有非主键列都只由整个主键组合确定。
第三范式
- 数据之间不能存在传递关系,即非主键列跟主键都是直接相关,而不是间接相关,非主键列不相互依赖。