第一范式: 表的列(或属性)不可再分
简而言之 就是表的列下面不能有子列,如下图所示:进货属性下不应该有两个子列
下面的表符合第一范式
第二范式:非主属性对码(主键)不存在部分函数依赖
码中一个或多个属性称为 主属性
如果非主属性 函数依赖于码(主键)中部分主属性 就不满足第二范式,下面的表就存在非主属性对码(主键)部分函数依赖
码是(学号,课名) 非主属性 姓名、系名和系主任 都依赖码的一部分主属性(学号),不满足第二范式
第三范式:非主属性对码(主键)不存在 传递函数 依赖
下面的表中 系主任 依赖 系名, 系名 依赖 学号(主键)存在传递函数依赖 不符合 第三范式
BCNF 范式:消除 主属性 对于码 的 部分函数依赖 与 传递函数 依赖
1.某公司有若干个仓库;
2.每个仓库只能有一名管理员,一名管理员只能在一个仓库中工作;
3.一个仓库中可以存放多种物品,一种物品也可以存放在不同的仓库中。每种物品在每个仓库中都有对应的数量。
上面表的码有两个
(仓库名, 物品名) 和 (管理员, 物品名)
因此主属性有 仓库名 物品名 管理员。
但是主属性 间存在依赖搞关系
(仓库名,) → (管理员)
(管理员) → (仓库名,)
因此 不符合BCNF范式
总结
1NF
| 消除非主属性对码的部分依赖
2NF
| 消除非主属性对码的传递依赖
3NF
| 消除主属性对码的部分和传递依赖
BCNF