0、前言
对于数据库的设计,要遵循一定的规则。本文详细介绍数据库的几大范式。
需要说明的是:以下的每一个范式,都是在上一个范式的基础上进行约束的,即:
1、第一范式(原子性)
概括一句话:数据库的每个字段不可再拆分。
例如:user_info内含有姓名、电话、住址,可以继续拆分,必须要拆开。
应变为:
2、第二范式 (依赖主键的全部)
概括两句话,在第一范式的基础上,满足:
1.一定要有主键(唯一标识性)
2.非主键字段必须“完全依赖”主键
注意,什么叫做“完全依赖”?其实就是“不是部份依赖”,就是不能仅仅依赖主键的一部分。
比如,以下非主键部分产生了部份依赖:
应当改为:
3、第三范式(只依赖主键、不依赖非主键)
一句话概括:非主键字段只允许依赖主键字段,而不能依赖别的非主键字段。
例如:
4、BCNF范式
一句话概括:主属性对于候选键不可以是部分依赖!
例如:
主属性仓库名对于候选键(管理员,物品名)是部分依赖的关系, 这样就有可能导致异常情况。
由于太多的范式要求会导致分表,这样会造成联表查询,因此范式也不是越多越好,后面的其他范式都不太常用了,因此本文就不做赘述咯。