期末考试大题题型:
1、 需要将学校中的系、教员、课程,以及他们之间的联系组织到关系数据库中,对于每个系需要存储的信息有系号、系名、系主任;对于每个教员,需要存储的信息有职工号、姓名、专长;对于每门课程,需要存储的信息有课程号、课程名、学分。有关的联系是:每个系有若干名教员,开设若干门课程;每位教员只在一个系工作;每门课程只由一个系开设,每位教员可讲授多门课程;每门课程可由多位教员讲授;课程之间有先修关系,每门课程可能需要多门其他课程做它的直接先修课,每门课程可以作为多门其他课程的直接先修课。要求:
1)转化ER图。(6分)
系(系号、系名、系主任)主码是系号
教员(职工号、姓名、专长、系号)主码是职工号,外码是系号
课程(课程号、课程名、学分、系号)主码是课程号,外码是系号
教授关系(教员号、课程号)主码是教员号和课程号,外码是教员号、课程号
先修课关系(课程号、先修课的课程号)主码是程号和先修课的课程号,外码是程号、先修课的课程号
四.设关系R具有属性集合{ A,B,C,D,E },函数依赖集合为F={A—>B,BC—>E,ED—>AB }。求解下列各题:
- 计算A+、(AB)+、(ABC) +、(BCD) +;
- 求等价于F的所有极小函数依赖集Fm,并说明求解步骤;
- 求R的所有候选码,并说明理由;
- R最高满足第几范式?为什么?
- 若R不属于BCNF,试改进该关系数据库设计,使它满足BCNF。
1.
A+=AB AB+=AB ABC+=ABCE BCD+=BCDEA(也为候选码)
2.
详细参见https://blog.csdn.net/lanshan1111/article/details/83959030
将依赖右边属性单一化,结果为:
F1={A->B,BC->E,ED->A,ED->B}
去掉左边属性冗余,也就是看是否可以由右边元素的子集推出右边
在F1中去掉依赖左部多余的属性,结果为
F2={A->B,BC->E,ED->A,ED->B}//显然此题不能由子集...
看是否有依赖ED->A,A->B,则ED->B去掉即可得到FM
在F2中去掉多余依赖
FM={A->B,BC->E,ED->A}
3.
也就是求它的所有子集(A,B,C,D,E,AB,AC...ABC...)的闭包,看是否为全集
ACD,BCD,CDE都是,可以看出来必须含有D,C因为依赖右边没有它俩的事,技巧
4.
满足了第一范式,它有部分依赖BC->E,它只能是1NF//这句话是错的:::::::::::看其也没有部分依赖也是//这句话是错的::::::::::::::::::第二,也没有传递依赖,就是第三,但A->B,A中无码,就不是BCNF
5.
分解为{A,B},{EDA}{CDE}
五.设有关系模式R(F,G,H,I,J),R的函数依赖集:F={F—>I,J—>I,I—>G,GH—>I,IH—>F}
(1)求出R的所有候选码。
(2)判断ρ={FG,FJ,JH,IGH,FH}是否为无损连接分解?
(3)将R分解为3NF,并具有无损连接性和依赖保持性。
ρ={R1(J,I), R2(G,H,I),R3(I,H,F),R4(J,H)}
//怎么求也没给说:
第一步就是先求它的最小依赖集
这一段落有待商榷:
结果:这个依赖集隐藏太深了{j->i,GH->I,IH->F}消去F->I,I->G是因为I—>G,GH—>I 得到GH->G一定成立,消去F—>I同理IH—>F,F->I得到IH->I恒成立//陷阱
//上边的这句话不对!这样写出只是为了便于写出分解以后的式子,直接按照依赖合并即可,当然也可以求出最小依赖集然后去重
最小依赖集并不用去掉F—>I I->G,正确的最小依赖集应是{J->I,GH->I,IH->F,F->I,I->G}
第二步就是合并求得的最xiao 依赖集
JI,GHI,IHF发现码并不在其中,再并上第一步取得的JF
结果:
P={R1(JI),R2(GHI),R3(IHF),R4(JH)}
OK
怎么求分解成BCNF?保持无损连接的分解,分解成BCNF并不总满足保持依赖
例:关系模式R<U,F>,其中:U={A,B,C,D,E},F={A→C,C→D,B→C,DE→C,CE→A},将其分解成BCNF并保持无损连接。
解:
① 令ρ={R(U,F)}。
② ρ中不是所有的模式都是BCNF,转入下一步。
③ 分解R:R上的候选关键字为BE(因为所有函数依赖的右边没有BE)。考虑A→C函数依赖不满足BCNF条件(因A不包含候选键BE),将其分解成R1(AC)、R2(ABDE)就是每次去掉分解的右面的那个元素。计算R1和R2的最小函数依赖集分别为:F1={A→C},F2={B→D,DE→D,BE→A}。其中B→D是由于R2中没有属性C且B→C,C→D;DE→D是由于R2中没有属性C且DE→C,C→D;BE→A是由于R2中没有属性C且B→C,CE→A。又由于DE→D是蕴含关系,可以去掉,故F2={B→D,BE→A}。
分解R2:R2上的候选关键字为BE。考虑B→D函数依赖不满足BCNF条件,将其分解成R21(BD)、R22(ABE)。计算R21和R22的最小函数依赖集分别为:F21={B→D},F22={BE→A}。
由于R22上的候选关键字为BE,而F22中的所有函数依赖满足BCNF条件。故R可以分解为无损连接性的BCNF如:ρ={R1(AC),R21(BD),R22(ABE)}
1.
还是求所有子集闭包,看起是否为U,易得JH(他俩在右边未出现过,必有他俩)为其候选码
2.
//https://blog.csdn.net/lanshan1111/article/details/83961908认真看就会了
//宿舍网太垃圾了,上传个图片都费劲,明明成功又他妈类型错误
易知为无损分解
3.
首先看它目前第几范式,JH候选码,J->I部分依赖,只能到达1NF
分解成ρ={R1(J,I), R2(G,H,I),R3(I,H,F),R4(J,H)},套路
解释同上
六.已知学生表S和学生选课表SC。其关系模式如下:
S(SNO,SN,SD,PR0V)
SC(SN0,CN,GR)
其中,SNO为学号,SN为姓名,SD为系名,PROV为省区,CN为课程名,GR为分数。试用SQL语言实现下列操作:
(1)查询“信息系”的学生来自哪些省区。
(2)按分数降序排序,输出“英语系”学生选修了“计算机”课程的学生的姓名和分数。
select PROV FROM S WHERE SD='信息系';//该死的引号
select SN,GR FROM S,SC WHERE SC.SNO=S.SNO AND SD=英语系 and CN='计算机' order by GR DESC;
- 设有如下三个基本表:A(A#,ANAME,WQTY,CITY);B(B#,BNAME,PRICE);AB(A#,B#,QTY)。表中各个属性的含义如下:A#(商店代号)、ANAME(商店名)、WQTY(店员人数)、CITY(所在城市)、B#(商品号)、BNAME(商品名称)、PRICE(价格)、QTY(商品数量)。试用SQL语言写出下列查询,并给出执行结果:
(1)找出店员人数不超过100人或者在长沙市的所有商店的代号和商店名。
select A#,ANAME FROM A WHERE WQTY<=100 OR CITY='长沙市';
(2)找出供应书包的商店名。
SELECT ANAME FROM A,B,AB WHERE A.A#=AB.A# AND B.B#=AB.B# AND B.BNAME='书包';
(
3)找出至少供应代号为256的商店所供应的全部商品的商店名和所在城市。
SELECT ANAME,CITY FROM A WHERE NOT EXISTS(SELECT * FROM AB X WHERE X.A#='256' AND NOT EXISTS (SELECT * FROM AB Y WHERE A.A#=Y.A# AND Y.B#=X.B#));
//类似于求解至少选修了20171789同学全部课程的学号
select distinct sno from sc x where not exists(select * from sc y where y.sno='20171789' and not exists(select * from sc z where z.sno=x.sno and z.cno=y.cno));
-
- 关系代数和SQL查询 (25分)
- 设有关系数据库:职工关系EMPLOYEE (职工号,职工名,街道,城市)
- 关系代数和SQL查询 (25分)
工作关系WORKS (职工号,公司号,工资)
公司关系COMPANY (公司号,公司名,城市)
假设职工可在多个公司兼职,请用关系代数表达式和SQL语句写出至少在公司号为‘C2’和‘C5’公司兼职的职工的职工号。
Select 职工号 from 工作关系 where 公司号=’C2’ and 职工号 in (select 职工号 from 工作关系 where 公司号=’C5’;
select 职工号 from works where 职工号 in (select 职工号 from works where 公司号=’C2’) and 公司号=’C5’
-
-
- 图书出版管理数据库中有两个基本表:
-
图书 (书号,书名,作者编号,出版社,出版日期)
作者 (作者编号,作者名,年龄,地址)
试用SQL语句写出下列查询:检索年龄低于作者平均年龄的所有作者的作者名、书名和出版社。
Select 作者名,书名,出版社 from 作者,图书 where 作者.作者编号=图书.作者编号 and 年龄<select avg(年龄) from 作者;
Select 作者名,书名,出版社
From 图书,作者
Where 图书.作者编号=作者.作者编号 and 年龄<(select AVG(年龄) from 作者)
-
-
- 设有职工关系模式如下:
-
PEOPLE(pno,pname,sex,job,wage,dptno)
其中:pno---职工号 pname---职工姓名 sex---性别
job---职业 wage-----工资 dptno----所在部门号
请分别写出下列查询要求的SQL语句
- 查询出工资比其所在部门平均工资高的所有职工信息。
select * from people x where x.wage>(select AVG(wage) from people y where y.dptno=x.dptno)- 查询列出工资大于赵明华工资的所有职工的信息。
-
- Select * from PEOPLE x where x.wage >select avg(wage) from PEOPLE y where x.dptno=y.dptno );
- Select * from PEOPLE where wage>select wage from PEOPLE where pname =’赵明华’;
- 设有四个关系模式如下:
-
S(sno,sname,state,city)---供应商关系
其中:sno---供应商号 sname---供应商名 city----供应商所在城市
P(pno,pname,color,wei,price)---零件关系
其中:pno---零件号 pname----零件名 color----零件颜色 price----单价
J(jno,jname,city)---工程项目关系
其中:jno---工程项目号 jname---工程项目名 city----工程项目所在城市
SPJ(sno,pno,jno,qty)---供应关系
其中:qty----供应零件数量
请分别写出下面查询要求的关系代数表达式和SQL语句:
查询列出供应了全部零件的供应商名和他所在的城市。
Select sname ,city from S where not exists(select * from P where not exists(select * from SPJ where sno=S.cno and pno=P.pno);
Select sname from S,P ,SPJ where S.sno =SPJ.sno and P.pno=SPJ.pno and P.color =’RED’;
询列出供应红色零件的供应商名。
- select
select sname from s,p,spj where s.sno=spj.sno and p.pno=spj.pno and color=’红’-
- 设有学生表S(SN0,SN)(SN0为学生号,SN为姓名)和学生选修课程表SC(SNO,CNO,CN,G)(CN0为课程号,CN为课程名,G为成绩),试用SQL语言完成以下各题:
-
(1)建立一个视图V—SSC(SNO,SN,CNO,CN,G),并按CNO升序排序;
(2)从视图V—SSC上查询平均成绩在90分以上的SN、CN和G。
Create view V-SSC(SNO,SN,CNO,CN,G) as select S.SNO,SN,CNO,CN,G from S,SC WHERE S.SNO=SC.SNO ORDER BY CNO ;
Select SN,CN,G FROM V—SSC GROUP BY SNO HAVING AVG(G) >90 ;//一定不能用where 而是having
因为WHERE子句中是不能用聚集函数作为条件表达式