补充题1设有下列关系模式和相应的函数依赖集:(1)R(A,B,C,D),F={A B→C,C→D,D→A}(2)R(A,B,C,D),F={B→C,B→D}(3)R(A,B,C,D),F={A B→C,B C→D,C D→A,A D→B}(4)R(A,B,C,D),F={A→B,B→C,C→D,D→A}(5)R(A,B,C,D,E),F={A B→C,D E→C,B→D}(6)R(A,B,C,D),F={A B→C,C→D,D→E}请判断它们最高属于什么范式?为什么?解:(1)是3N F,但不是B C N F。
因为该关系模式的码为A B,B C和B D,所有属性均为主属性,是3N F。
但由于C→D,D→A中的左边不包含候选码,所以不是B C N F。
(2)是2N F,不是3N F。
因为该关系模式的码为A B,由函数依赖B→C,B→D,可得C,D部分函数依赖于A B,所以在关系模式中存在非主属性对码的部分函数依赖,不满足3N F。
(3)3N F,也是B C N F。
在该关系模式中,A B,C D,A D,B C都是侯选码,所有属性均为主属性,所以不存在非主属性对码的传递依赖。
所以是3N F。
因为所有的函数依赖的左部都包含侯选码,所以该关系模式是B C N F。
(4)是3N F,也是B C N F。
在该关系模式中,A,B,C和D均为侯选码,它们也都是主属性,所以是3N F。
也是B C N F。
(5)是1N F,不是2N F.该关系模式的侯选码为A B E,由函数依赖A B→C可知在该关系模式中存在非主属性对侯选码的部分函数依赖,所以不是2N F。
(6)是2N F,不是3N F。
该关系模式的侯选码为A B,因为存在非主属性对侯选码的传递依赖,所以不是3N F。
【习6-2】建立关于系、学生、班级、学会等诸信息的一个关系数据库。
描述学生的属性有:学号、姓名、出生年月、系名、班号、宿舍区。
描述班级的属性有:班号、专业名、系名、人数、入校年份。
描述系的属性有:系名、系号、系办公室地点、人数。
描述学会的属性有:学会名、成立年份、地点、人数。
有关语义如下:一个系有若干个专业,每个专业每年只招一个班,每个班有若干学生,一个系的学生住在同一宿舍区。
每个学生可以参加若干个学会,每个学会有若干学生。
学生参加某学会有一个入会年份。
请给出关系模式,写出每个关系模式的最小函数依赖集,指出是否存在传递函数,对于函数依赖左部是多属性的情况,讨论函数依赖是完全函数依赖,还是部分函数依赖。
指出各关系的候选码、外码,有没有全码存在?解:(1)学生关系学生(学号,姓名,出生年月,系名,班号,宿舍区)候选码:学号外码:系名,班号最小函数依赖集F'={学号→姓名,学号→出生年月,学号→班号,班号→系名,系名→宿舍区}存在传递函数依赖:学号→系名,系名→宿舍区,且学号不函数依赖于系名。
所以宿舍区传递函数依赖于学号。
班号→系名,系名→宿舍区,且班号不函数依赖于系名。
所以宿舍区传递函数依赖于班号。
学号→班号,班号→系名,且学号不函数依赖于班号。
所以系名传递函数依赖于学号。
(2)班级关系班级(班号,专业名,系名,人数,入学年份)候选码:班号外码:系名最小函数依赖集F'={班号→专业名,班号→人数,班号→入学年份,专业名→系名} 存在传递函数依赖:班号→专业名,专业名→系名,且班号不函数依赖于专业名。
所以系名传递函数依赖于班号。
(3)系关系系(系号,系名,系办公室地点,人数)候选码:系号,系名无外码最小函数依赖集F'={系号→系名,系号→系办公室地点,系号→人数,系名→系号} (4)学会关系学会(学会名,成立年份,地点,人数)候选码:学会名无外码最小函数依赖集F'={学会名→成立年份,学会名→地点,学会名→人数}(5)学生参加学会关系学生-学会(学号,学会名,入会年份)候选码:(学号,学会名)无外码:学号,学会名最小函数依赖集F'={(学号,学会名)→入会年份}以上各关系均不是全码关系。
【习6-3】试由Armostrong公理系统推导出下面三条推理规则:(1)合并规则:若X→Z,X→Y,则有X→YZ(2)伪传递规则:若X→Y,WY→Z,则有XW→Z(3)分解规则:若X→Y,Z⊆Y,则有X→Z解:(1)根据增广律和X→Z可得:XY→YZ由增广律和X→Y可得:XX→XY,即X→XY由传递律和X→XY、XY→YZ可得X→YZ(2)由增广律和X→Y,可得XW→WY由传递律和XW→WY、WY→Z可得XW→Z(3)由自反律和Z⊆Y可得:Y→Z由传递律和X→Y、Y→Z,可得X→Z【习6-5】试举出三个多值依赖的实例。
解:多值依赖的定义是:设R (U )是属性集U 上的一个关系模式。
X ,Y ,Z 是U 的子集,并且Z=U-X-Y 。
对于一给定的X 值,就有一组Y 属性值与之对应,而与Z 中的属性无关,则称“Y 多值依赖于X ”,或“X 多值决定Y ”,记作X →→Y 。
多值依赖在实际的应用中可能不是太常见的一种数据依赖,下面给出三个实例: (1)学生(学号,课程号,教师工号),一个学生可选一组课程学习,一个学生也可有多个教师来教授,由于一个课程可由多个教师来讲授,而且一个教师可以讲授多们课程,所以存在如下两个多值依赖:学号→→课程号和学号→→教师工号。
(2)图书馆中的图书(图书号,图书索引号,借阅读者),一种图书可有多个副本,由索引号标识,一种图书可由多个读者借阅。
所以存在多值依赖:图书号→→图书索引号和图书号→→借阅读者。
(3)上课(学号,教师工号,教室),一个学生可由多个教师来教,一个学生可在多教室上课,而且一个教师可在多个教室上课,一个教室可由多个教师上课。
所以存在如下多值依赖:学号→→教师工号和学号→→教室。
【习6-9】下图表示一个公司各部门的层次结构。
对每个部门,数据库中包含部门号(唯一的)D#,预算费(BUDGET )以及此部门领导人员的职工号(唯一的)E#等信息。
对每一个部门,还存有关于此部门的全部职工、生产与科研项目以及办公室的信息。
职工信息包括:职工号,他所参加的生产科研项目号(J#),他所在办公室的电话号码(PHONE#)。
生产科研项目包含:项目号(唯一的),预算费。
办公室信息包含:办公室房间号(唯一的),面积。
对每个职工,数据库中有他曾担任过的职务以及担任某一职务时的工资历史。
对每个办公室包含此办公室中全部电话号码的信。
请给出你认为合理的数据依赖,把这个层次结构转换成一组规范化的关系。
部门电话办公室生产科研项目工资史职务职工提示:此题可分步完成,第1步先转换成一组1NF 的关系,然后逐步转换为2NF,3NF,..。
解:语义假设:(1)一个职工不能同时在一个以上的部门任经理 (2)一个职工不能同时在一个以上的部门工作 (3)一个职工不能同时在一个以上的办公室办公(4)一个职工不能同时参加一个以上的工程(5)一个职工不能同时有一个以上的电话。
(6)一个职工不能同时有一个以上的职务(7)一项工程不能同时分派给一个以上的部门(8)一个办公室不能同时分配给一个以上的部门。
在上述的语义假设下,数据库中所用的属性间对应的函数依赖有:E#→D#,E#→J#,E#→OF#(办公室编号),E#→PHONE#(电话号码)D#→MGRE#(经理的职工号),D#→DBUGET(部门预算费)J#→JBUGET(科研项目预算费),J#→D#OF#→AREA(面积),OF#→D#PHONE#→OF#(E#,DATE(日期)→HSALARY(工资史),(E#,DATE)→JOBTITLE(职务)(1)步骤1这个层次结构未规范化的关系如下:DEPT1(D#,DBUGET,MGRE#,J#,REMP1,RPROJ1,ROFFICE1)EMP1(E#,J#,OF#,PHONE#,RJOB1)JOB1(JOBTITLE,RSALHIST1)SALHIST1(DATE,SALARY)PROJ1(J#,JBUGET)OFFICE1(OF#,AREAR,RPHONE1)PHONE1(PHONE#)注:有前缀RD的表示是一个关系,例如REMP1表示关系EMP1。
(2)步骤2把上述一组未规范化的关系转换为一组等价关系,化简过程是通过分割考虑每个子层次,直接消除不是函数依赖的多值依赖。
DEPT2(D#,DBUGET,MGRE#)EMP2(E#,J#,OF#,PHONE#)JOB2(D#,E#,JOBTITLE)SALHIST2(D#,E#,JOBTITLE,DATE,SALARY)PROJ2(D#,J#,JBUGET)OFFICE2(D#,OF#,AREAR)PHONE2(D#,OF#,PHONE#)(3)步骤3可以通过消除部分函数依赖,把上述1NF关系转化成一组等价的2NF关系,下面逐一考察每个1NF关系。
DEPT2:这个关系已经属于2NF。
EMP2:这个关系中D#作为主码的组成部分是多余的,可以用E#作为主码,这样该关系本身也是2NF。
JOB2:同样,D#也无需作为主码的组成部分,此处D#函数依赖于E#,所以,在这个关系中一个非主属性(E#)部分函数依赖于主码(E#,JOBTITLE)。
因此,JOB1不属于2NF,可以分解为下面两个关系:JOB31(E#,JOBTITLE)JOB32(E#,D#)由于JOB31是SALHIST2的投影,而JOB32是EMP2的投影,所以这两个关系都可以去掉。
SALHIST2:如同JOB2一样,可以把D#投影去掉,而且JOBTITLE也无需作为主码,得到下面的一个2NF关系:SALHIST3(E#,JOBTITLE,DATE,SALARY)PROJ2:如同EMP2一样,我们也可以把D#看作是非主属性,那么,这个关系也属于2NF。
OFFICE2:类似的说明对这个关系也是适用的。
PHONE2:我们可以完全把D#投影去掉,因为关系(D#,OF#)是OFFICE2的投影,而且OF#函数依赖于PHONE#,所以我们可以单独用PHONE#作为主码,得到2NF关系:PHONE2(PHONE#,OF#)于是我们得到一组2NF关系如下:DEPT3(D#,DBUGET,MGRE#)EMP3(E#,J#,D#,OF#,PHONE#)SALHIST3(E#,JOBTITLE,DATE,SALARY)PROJ3(D#,J#,JBUGET)OFFICE3(D#,OF#,AREAR)PHONE3(OF#,PHONE#)(4)步骤4下面可以通过消去2NF关系中的传递函数依赖,生成一组等价的3NF关系,上述一组关系中尚不是3NF的2NF关系只有EMP3,其中的OF#和D#都传递函数依赖主码D#;OF#经由PHONE#依赖于E#,而D#则经由J#和经由OF#传递函数依赖于E#。