数据库范式教案.ppt
文本预览下载声明
数据库范式 第一范式(1NF) 在关系模式R中的每一个具体关系,如果每个属性值都是由不可分割的最小数据单位组成或者说每个属性的值必须是唯一的,则称R属于第一范式,换一句话说是指:在关系每个元组的所有属性上的值都必须是原子值,相反的凡具有集合属性或嵌套子关系的关系都不是第一范式; 例如:由“职工号”、“姓名”、“电话号码”组成的表(一个人可能有一个办公室电话和一个家庭电话号码),这时将其规范成为1NF有三种方法: 重复存储“职工号”和“姓名”。此时,关键字只能是“电话号码”。 “职工号”为关键字,“电话号码”分为“单位电话”和“住宅电话”两个属性。 “职工号”为关键字,但强制每条记录只能有一个电话号码。 解决方法: 第三范式(3NF) 属于第二范式,且表中的任何一个非主属性都不传递函数依赖于任何关键字,则为第3范式;如果关系模式R中的所有非主属性对于任何候选关键字都不存在传递依赖,则称关系R属于第三范式。 即如果一个表中的任意三列A、B、C,存在着A决定B,且B决定C的情况,那么这个表就不属于第三范式,因为A可以通过传递依赖决定C,这时应该将传递依赖分解到两个表中。 同时上表中的3个表都属于第3范式; 所谓传递函数依赖,指的是如果存在“A—B —C”的决定关系,则C 传递函数依赖于A。 因此,满足第三范式的数据库表应该不存在如下依赖关系: 关键字段—非主键字段x—非主键字段y 假如学生关系表为Student(学号,姓名,年龄,所在学院,学院地 点,学院电话),关键字为单一关键字“学号”,因为存在如下决定关系: (学号)—(姓名,年龄,所在学院,学院地点,学院电话) 这个数据库表是符合2NF,但是不符合3NF,因为存在如下决定关系: (学号)—(所在学院) —(学院地点,学院电话) 即存在非关键字段学院地点,学院电话对关键字段学号的传递函数依赖 它会存在数据冗余,更新异常,插入异常,删除异 常。 将学生关系表分为如下两个表: 学生:(学号,姓名,年龄,所在学院) 学院:(学院,学院地点,学院电话) 这样的数据库表是符合3NF,消除了数据冗余,更 新异常,插入异常,删除异常。 BCNF 若关系模式R是第一范式,且每个属性都不传递依赖于R的候选键。这种关系模式就是BCNF模式。即在第三范式的基础上,数据库表中如果不存在任何字段对任一候选关键字段的传递函数依赖则符合鲍依斯-科得范式。 假设仓库管理关系表为StorehouseManage(仓库ID, 存储物品ID, 管理员ID, 数量),且有一个管理员只在一个仓库工作;一个仓库可以存储多种物品。这个数据库表中存在如下决定关系: (仓库ID, 存储物品ID) →(管理员ID, 数量) (管理员ID, 存储物品ID) → (仓库ID, 数量) 所以,(仓库ID, 存储物品ID)和(管理员ID, 存储物品ID)都是StorehouseManage的候选关键字,表中的唯一非关键字段为数量,它是符合第三范式的。但是,由于存在如下决定关系: (仓库ID) → (管理员ID) (管理员ID) → (仓库ID) 即存在关键字段决定关键字段的情况,所以其不符合BCNF范式。它会出现如下异常情况: (1) 删除异常: 当仓库被清空后,所有存储物品ID和数量信息被删除的同时,仓库ID和管理员ID信息也被删除了。 (2) 插入异常: 当仓库没有存储任何物品时,无法给仓库分配管理员。 (3) 更新异常: 如果仓库换了管理员,则表中所有行的管理员ID都要修 改。 把仓库管理关系表分解为二个关系表: 仓库管理:StorehouseManage(仓库ID, 管理员ID); 仓库:Storehouse(仓库ID, 存储物品ID, 数量)。 这样的数据库表是符合BCNF范式的,消除了删除异常、插 入异常和更新异常。 四种范式之间的关系 第四范式(4NF) 第四范式首先要求是第三范式,且在关系模式中,至多只有一个多值事实。所谓多值事实,就是指某个属性有若干个值,这些值由另一个属性的一个值决定。 例如,职工表(职工编号,职工孩子姓名,职工选修课程),在这个表中同一个职工可能会有多个职工孩子姓名。类似地,同一个职工也可能会有多个职工选修课程,即这里存在着两个多值事实,即不符合第四范式。如果要符合第四范式,则只需要将这个表分为两个表,使它们最多只有一个多值事实。职工表1(职工编号,职工孩子姓名),职工表2(职工编号,职工选修课程),此时职工表1和职工表2都只有一个多值事实,所以这是符合第四范式的。 第五范式(5NF) 第五范式,如果在保证信
显示全部