98级“数据库系统原理”重考卷参考答案2002年5月一、(1)B(2)D(3)A(4)C(5)A(6)D(7)B(8)A(9)B(10)A(11)D(12)B(13)A(14)C(15)B(16)D(17)B(18)D(19)B(20)C二、1.2.证明:∵A→B,则在R中,对于A的一个确定值均有一个B值与之对应又∵π1,2(R)⋈π1,3(R)={R1.A,R1.B,R2.A,R2.C}∴当R1.A=R2.A时,B值确定,上式等于{A,B,C}3.(1)R是BCNF。R候选关键字为XY,F中只有一个函数依赖,而该函数依赖的左部包含了R的候选关键字。(2)R是3NF。R候选关键字为XY和XZ,R中所有属性都是主属性,不存在非主属性对候选关键字的传递依赖。(3)R是BCNF。R候选关键字为X和Y,∵X→YZ,∴X→Y,X→Z,由于F中有Y→Z,Y→X,因此Z是直接函数依赖于X,而不是传递依赖于X。又∵F的每一函数依赖的左部都包含了任一候选关键字,∴R是BCNF。(4)R是BCNF。R候选关键字为X,而且F中每一个函数依赖的左部包含了候选关键字X。(5)R是1NF。R候选关键字为WX,则Y,Z为非主属性,又由于X→Z,因此F中存在非主属性对候选关键字的部分函数依赖。4.解:设X=BD(1)X(0)=BD(2)在F中找出左边是BD子集的函数依赖,结果为:D→EG,所以X(1)=X(0)EG=BDEG。显然X(i+1)≠X(i)(i=0)。在F中继续寻找左边是BDEG子集的函数依赖,但用过的函数依赖不再考虑,其结果是BE→C,于是X(2)=X(1)C=BCDEG。显然X(i+1)≠X(i)(i=1)。在F中寻找左边是BCDEG子集的未用过的函数依赖,其结果是:C→A,BC→D,CG→BD,CE→AG在这些函数依赖中,未在X(2)中出现过的属性为A,于是X(3)=X(2)A=ABCDEG。这时X(i+1)≠X(i)(i=2),在F中还有未用过的函数依赖,但我们发现X(3)中已包含了属性集U中的全部属性,再计算下去,X(i)也不会增加新属性,计算完毕。输出结果:(BD)F+=ABCDEG三、SQL1.SELECTJNO,JNAMEFROMJOBWHERECITY=‘上海’;2.SELECTSNOR1ABabcdbddecaaeR2ABCcccR3AabcR1ABBCbcccbcbcFROMSPJWHEREJNO=‘J1’;3.SELECTSNOFROMSPJWHEREPNO=‘P1’ANDJNO=‘J1’;4.SELECTSNOFROMSPJWHEREJNOIN(SELECTJNOFROMJOBWHERECITY=‘上海’ORCITY=‘武汉’);5.SELECTJNOFROMJOBWHERE(‘上海’,‘P2’)NOTIN(SELECTCITY,PNOFROMSUPPLIER,PARTWHERE(SNO,PNO)IN(SELECTSNO,PNOFROMSPJWHEREJNO=JOB.JNO));ALPHA1.GETW(JOB.JNO,JNAME):JOB.CITY=‘上海’2.GETW(SPJ.SNO):SPJ.JNO=‘J1’3.GETW(SPJ.SNO):SPJ.PNO=‘P1’ANDSPJ.JNO=‘J1’4.RANGEJOBJXGETW(SPJ.SNO):JX(SPJ.JNO=JX.JNO∧(JX.CITY=‘上海’∨JX.CITY=‘武汉’))5.RANGSUPPLIERSXGETW(SPJ.JNO):SX(SPJ.SNO=SX.SNO∧SPJ.PNO≠‘P2’∧SX.CITY=‘上海’)四、1.2.借书人(借书证号,姓名,单位)图书(书号,书名,数量,位置,出版社名)出版社(出版社名,电报,电话,邮编,地址)借阅(借书证号,书号,借书日期,还书日期)五、1.是可串行化的,其并行执行的结果相当于T1:读A、B=A+1和T2:A=B+1串行执行的结果:A=7、B=6。2.T1不遵循两段锁协议,其封锁和解锁是交叉进行的;T2遵循两段锁协议,它对数据的操作是先加锁,操作完成后再解锁。3.如右图所示。借书人图书出版社借阅出版借书证号姓名单位借书日期还书日期书号书名数量位置出版社名电报编号邮编地址电话T1T2SLOCKAX=AXLOCKB等待XLOCKA等待SLOCKB等待m1mn