2010年上半年5月份系统分析师上午试题答案(分析与解答)之六
(43)
参考答案:B
(44)
参考答案:C
(45)
试题分析:
1NF:每个属性不可重复不可再分
2NF:消除非主属性对关键字的部分依赖
3NF:消除非主属性对关键字的传递依赖
BCNF:在2NF、3NF的基础上消除主属性对关键字的部分、依赖传递
详解:
在创建一个数据库的过程中,范化是将其转化为一些表的过程,这种方法可以使从数据库得到的结果更加明确。这样可能使数据库产生重复数据,从而导致创建多余的表。范化是在识别数据库中的数据元素、关系,以及定义所需的表和各表中的项目这些初始工作之后的一个细化的过程。
(物品名称,购买顾客,物品价格)
如果上面这个表用于保存物品的价格,而你想要删除其中的一个顾客,这时你就必须同时删除一个价格。范化就是要解决这个问题,你可以将这个表化为两个表,一个用于存储每个顾客和他所买物品的信息,另一个用于存储每件产品和其价格的信息,这样对其中一个表做添加或删除操作就不会影响另一个表。
1 第一范式(1NF)
在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。
所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。
例:以下两种不满足1NF
① 学号 姓名 所选课程1 所选课程详情1 所选课程2 所选课程详情2
② 部门编号部门名称 员工信息
员工号 员工姓名 员工性别
如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。
在第一范式(1NF)中表的每一行只包含一个实例的信息。
例子中的员工信息,不能将员工信息都放在一列中显示,也不能将其中的两列或多列在一列中显示;需要单建一个员工信息表,且每一行只表示一个员工的信息,一个员工的信息在表中只出现一次。
简而言之,第一范式就是无重复(不可分割)的列。
2 第二范式(2NF)
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。
第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。
为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。如图员工信息表中会加上员工编号(id)列,因为每个员工的员工编号是惟一的,因此每个员工可以被惟一区分。这个惟一属性列被称为主关键字或主键、主码。
第二范式(2NF)要求实体的属性完全依赖于主关键字。
所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。
例:以下关系不符合2NF
选课关系表SelectCourse(学号, 姓名, 年龄, 课程名称, 成绩, 学分),
关键字为组合关键字(学号, 课程名称),因为存在如下决定关系:
(学号, 课程名称) → (姓名, 年龄, 成绩, 学分)
这个数据库表不满足第二范式,因为存在如下决定关系:
(课程名称) → (学分) (部分依赖)
(学号) → (姓名, 年龄) (部分依赖)
由于不符合2NF,这个选课关系表会存在如下问题:
(1) 数据冗余:
同一门课程由n个学生选修,"学分"就重复n-1次;同一个学生选修了m门课程,姓名和年龄就重复了m-1次。
(2) 更新异常:
若调整了某门课程的学分,数据表中所有行的"学分"值都要更新,否则会出现同一门课程学分不同的情况。
(3) 插入异常:
假设要开设一门新的课程,暂时还没有人选修。这样,由于还没有"学号"关键字,课程名称和学分也无法记录入数据库。
(4) 删除异常:
假设一批学生已经完成课程的选修,这些选修记录就应该从数据库表中删除。但是,与此同时,课程名称和学分信息也被删除了。很显然,这也会导致插入异常。
把选课关系表SelectCourse改为如下三个表:
学生:Student(学号, 姓名, 年龄);
课程:Course(课程名称, 学分);
选课关系:SelectCourse(学号, 课程名称, 成绩)。
非主属性只依赖关键字中的部分主属性,对其进行数据操作时,有可能使得关键字中未被依赖的那部分主属性极其相关信息丢失或出现错误,从而导致更新、插入、删除异常等。
符合第二范式的数据库表,消除了数据冗余、更新异常、插入异常和删除异常。
数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖,也即所有非关键字段都完全依赖于任意一组候选关键字。
简而言之,第二范式就是非主属性非部分依赖于主关键字。
另外,所有单关键字的数据库表都符合第二范式,因为不可能存在组合关键字。
3 第三范式(3NF)
满足第三范式(3NF)必须先满足第二范式(2NF)。
第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。
例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。
第三范式就是属性不依赖于其它非主属性。
例:
学生关系表Student(学号, 姓名, 年龄, 所在学院, 学院地点, 学院电话)
关键字为单一关键字"学号"
(学号) → (姓名, 年龄, 所在学院, 学院地点, 学院电话)
这个数据库是符合2NF的,但是不符合3NF,因为存在如下决定关系:
(学号) → (所在学院) → (学院地点, 学院电话)
(学院地点,学院电话)不能直接由学生学号决定,而是由学院名称决定的。
而学院名称依赖于学号,因此出现了非主属性对关键字(学号)的依赖传递,不符合3NF。
数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。所谓传递函数依赖,指的是如果存在"A → B → C"的决定关系,则C传递函数依赖于A。因此,满足第三范式的数据库表应该不存在如下依赖关系:
关键字段 → 非关键字段x → 非关键字段y
简而言之,第三范式不存在非主属性对关键字的传递依赖。
4、BCNF
在第三范式的基础上。
3NF规定的是非主属性对关键字的传递依赖,而BCNF进一步规定任一属性(包括主属性和非主属性)对关键字都不存在传递依赖,且不存在主属性对关键字的部分依赖(2NF规定为非主属性对关键字的部分依赖)。
例:仓库管理关系表StorehouseManage(仓库ID, 存储物品ID, 管理员ID, 数量)
且有一个管理员只在一个仓库工作;一个仓库可以存储多种物品,因此关键字为(仓库ID, 存储物品ID)和(管理员ID, 存储物品ID)。
(仓库ID, 存储物品ID) →(管理员ID, 数量)
(管理员ID, 存储物品ID) → (仓库ID, 数量)
非主属性“数量”,完全且直接依赖于两个后选码,因此符合2NF和3NF。
但是,由于存在如下决定关系,所以其不符合BCNF范式:
(仓库ID) → (管理员ID)
(管理员ID) → (仓库ID)
如果关系模式R(U,F)的所有属性(包括主属性和非主属性)都不传递依赖于R的任何候选关键字,那么称关系R是属于BCNF的。或是关系模式R,如果每个决定因素都包含关键字(而不是被关键字所包含),则为BCNF的关系模式。
把仓库管理关系表分解为二个关系表:
仓库管理:StorehouseManage(仓库ID, 管理员ID);
仓库:Storehouse(仓库ID, 存储物品ID, 数量)。
这样的数据库表是符合BCNF范式的,消除了删除异常、插入异常和更新异常。
如果关系模式R∈1NF,且所有的函数依赖X->Y(Y X),决定因素X都包含了R的一个候选码,则称R属于BC范式,记做R ∈BCNF。
一个满足BCNF范式的关系模式有:
所有非主属性对每一个码都是完全函数依赖。
所有的主属性对每一个不包含它的码,也是完全函数依赖
没有任何属性完全函数依赖于非码的任一组属性。
如果R ∈BCNF,则R ∈3NF。
BCNF排除了任何属性对码的传递与部分依赖。
简而言之,如果每个决定因素都包含关键字(而不是被关键字所包含),则为BCNF的关系模式。
(仓库ID, 存储物品ID) →(管理员ID, 数量) 决定因素(仓库ID, 存储物品ID),为关键字(包含关键字);
仓库ID->管理员ID,决定因素仓库ID,为主属性,非关键字,被关键字(仓库ID, 存储物品ID)所包含。
----------------------------------------------------------
1NF:每个属性不可重复不可再分
2NF:消除非主属性对关键字的部分依赖
3NF:消除非主属性对关键字的传递依赖
BCNF:在2NF、3NF的基础上消除主属性对关键字的部分、依赖传递
参考答案:C
(46)
试题分析:
段号0的基地址1598的含义是:
基地址1598意思是段号0在内存中的起始地址。
(0,1597)代表的含义是什么呢?
0即段号,1597是位移量。也就是说(X,Y)X代表的是段号,Y代表位移量。
逻辑地址(0,1597)的物理地址是:
先找到0段号对应的基地址
物理地址=段号对应的基地址+偏移量
所以说:
Y的取值范围是: 0<= Y <= (段长 - 1)
A C选项(0,1597)不对,1596大于段号0的段长600
D选项(4,1066)不对,1066大于段号4的段长960
参考答案:B
(47)
试题分析:
柱面号为18的请求序列有3个,分别为:1,5,7
柱面号为25的请求序列有4个,分别为:2,3,8
柱面号为40的请求序列有2个,分别为:4,6
柱面号为45的请求序列有1个,分别为:9
根据排除法选择B
参考答案:B
(48)
试题分析:
2-8-3-5-7-1-4-6-9
先从22号柱面移动到25号柱面:25-22=3
先从25号柱面移动到18号柱面:25-18=7
先从18号柱面移动到40号柱面:40-18=22
先从40号柱面移动到45号柱面:45-40=5
累计移动3+7+22+5=37
所以平均移动臂的距离为37/9=4.11
【(25-22)+(25-18)+(40-18)+(45-40)】/9=37/9=4.11
参考答案:A