第一范式(1NF)

对于一张二维表,最基本的要求就是:每一个分量必须是不可分的数据项,也就是说同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性,强调表的原子性。满足了这个条件的关系表就属于第一范式。

若要满足第一范式,可将上述表重构为下表:

编号 品名 进货数量 进货单价 销售数量 销售单价 备注

但如果仅仅只是满足了1NF,会出现数据大量的冗余,例如下表:

第二范式(2NF)

当关系表满足第一范式时,并且所有的非主属性都完全依赖于关键字。从这个定义可以看出,第二范式不存在非主属性对于部分候选关键字的部分依赖,不过允许非主属性之间存在着传递依赖

学号 姓名 年龄 课程名称 成绩 学分

上表不满足第二范式,因为存在如下关系:

(课程名称)→(学分)

(学号)→(姓名,年龄)

由于不满足2NF,这个选课关系表会存在如下问题:

  • 数据冗余:同一个课程被n个同学选到,那么学分这个属性就会重复n-1行。

  • 更新异常:若调整了某门课程的学分,数据表中所有相关行的学分都要修改,否则会出现一门课程学分不同的情况。

  • 插入异常:假设要开设一门新的课程,暂时还没有人选修。这样,由于还没有”学号”关键字,课程名称和学分也无法记录入数据库。

如果要优化上表,可以将表分成一下三个表

  • 学生:Student(学号,姓名,年龄);

  • 课程:Course(课程名称,学分);

  • 选课关系:SelectCourse(学号,课程名称,成绩)。

第三范式(3NF)

所谓第三范式,是指每一个非主属性既不部分依赖于也不传递依赖于关键字,也就是在第二范式的基础上消除传递依赖

假定学生关系表:

学号 姓名 年龄 所在学院 学院地点 学院电话

这个数据库是符合2NF的,但是不符合3NF,因为存在如下决定关系:

  (学号) → (所在学院) → (学院地点,学院电话)

即存在非关键字段”学院地点”、”学院电话”对关键字段”学号”的传递函数依赖。

它也会存在数据冗余、更新异常、插入异常和删除异常的情况

把学生关系表分为如下两个表:

  • 学生:(学号,姓名,年龄,所在学院)

  • 学院:(学院,地点,电话)

这样的数据库表是符合第三范式的,消除了数据冗余、更新异常、插入异常和删除异常。

BC范式(BCNF)

所谓BCNF,是指在第三范式的基础上进一步消除主属性对于码的部分函数依赖和传递依赖。BCNF需要符合3NF,并且,主属性不依赖于主属性。

假设仓库管理关系表为StorehouseManage(仓库ID,存储物品ID,管理员ID,数量),且有一个管理员只在一个仓库工作;一个仓库可以存储多种物品。这个数据库表中存在如下决定关系:

  (仓库ID,存储物品ID) →(管理员ID,数量)

  (管理员ID,存储物品ID) → (仓库ID,数量)

所以,(仓库ID,存储物品ID)和(管理员ID,存储物品ID)都是StorehouseManage的候选关键字,表中的唯一非关键字段为数量,它是符合第三范式的。但是,由于存在如下决定关系:

  (仓库ID) → (管理员ID)

  (管理员ID) → (仓库ID)

即存在关键字段决定关键字段的情况,所以其不符合BCNF范式。它会出现如下异常情况:

  • 删除异常:当仓库被清空后,所有”存储物品ID”和”数量”信息被删除的同时,”仓库ID”和”管理员ID”信息也被删除了。

  • 插入异常:仓库没有存储任何物品时,无法给仓库分配管理员。

  • 更新异常:如果仓库换了管理员,则表中所有行的管理员ID都要修改。

把仓库管理关系表分解为二个关系表:

  • 仓库管理:StorehouseManage(仓库ID,管理员ID);

  • 仓库:Storehouse(仓库ID,存储物品ID,数量)。

第四范式(4NF)

第四范式的定义:关系表R<U, F>属于第一范式,如果对于R的每个非平凡多值依赖X→→Y(Y不包含于X),X都含有键,则称R属于4NF。

4NF是在3NF的基础上消除了属性间的非平凡且非函数依赖的多值依赖。

例:

关系模式WSC(W, S, C)中,W表示仓库,S表示保管员,C表示商品。假设每个仓库有若干保管员,有若干种商品。每个保管员保管所在仓库的所有商品,每种商品被所有保管员保管。WSC的键为(W, S, C),在WSC中存在非平凡的多值依赖:W→→S,W→→C,而W不是键,因此WSC不是4NF。可以用分解法对其进行处理,把WSC分解为两个表:WS(W, S),WC(W, C)。在WS中存在多值依赖W→→S,但这是平凡的多值依赖,所以WS属于第四范式。同理WC与属于4NF。

第四范式的应用范围比较小,因为只有在某些特殊情况下,要考虑将表规范到第四范式。所以在实际应用中,一般不要求表满足第四范式。

小结

各个范式的关系图: