最开始比较模糊,现在是有很大的感触。第一范式是没有重复的列,即列不可分割。第二范式是存在关键字,区分每一行。第三范式是确保表不存在子表,例如关键字学号-------学院--------学院地点-----学院电话。存在一个子表,关键字学院-------地点---------电话。用官方话说就是非关键字之间不存在传递依赖。这里的非关键字就有学院,地点,电话。所谓的bcnf范式,即鲍依斯科德范式。不存在关键字决定关键字的情况。
假设仓库管理关系表为StorehouseManage(仓库ID, 存储物品ID, 管理员ID, 数量),且有一个管理员只在一个仓库工作;一个仓库可以存储多种物品。这个数据库表中存在如下决定关系:
(仓库ID, 存储物品ID) →(管理员ID, 数量)(管理员ID, 存储物品ID) → (仓库ID, 数量)
所以,(仓库ID, 存储物品ID)和(管理员ID, 存储物品ID)都是StorehouseManage的候选关键字,表中的唯一非关键字段为数量,它是符合第三范式的。但是,由于存在如下决定关系:
(仓库ID) → (管理员ID)
(管理员ID) → (仓库ID)
即存在关键字段决定关键字段的情况,所以其不符合BCNF范式。它会出现如下异常情况: