数据库范式
1NF(无重复列)
所有的域都应该是原子的,即每一列都是不可分割的数据项
2NF(消除部分子函数依赖)
假如:(学号,姓名,年龄,课程号,成绩,学分), primary key 为(学号, 课程号)
所以存在(学号,课程号) → (姓名,年龄,成绩,学分)
但该表不满足2NF,因为存在以下关系
(课程名称) → (学分)
(学号) → (姓名,年龄)
即存在组合关键字中的字段绝对非关键字
3NF(消除传递依赖,非主属性)
假定:(学号, 姓名, 年龄, 所在学院, 学院地点, 学院电话),关键字为单一关键字"学号",因为存在如下决定关系:
(学号) → (姓名, 年龄, 所在学院, 学院地点, 学院电话)
这个数据库是符合2NF的,但是不符合3NF,因为存在如下决定关系:
(学号) → (所在学院) → (学院地点, 学院电话)
即存在非关键字段"学院地点"、"学院电话"对关键字段"学号"的传递依赖。
BCNF(消除候选关键字的传递依赖)
假设:(仓库ID, 存储物品ID, 管理员ID, 数量),且有一个管理员只在一个仓库工作;一个仓库可以存储多种物品。这个数据库表中存在如下决定关系:
(仓库ID, 存储物品ID) →(管理员ID, 数量)
(管理员ID, 存储物品ID) → (仓库ID, 数量)
所以,(仓库ID, 存储物品ID)和(管理员ID, 存储物品ID)都是的候选关键字,表中的唯一非关键字段为数量,它是符合第三范式的。但是,由于存在如下决定关系:
(仓库ID) → (管理员ID)
(管理员ID) → (仓库ID)