宝子们心心念念的数据库大题来啦~
我已经整理好啦~你们根据目录找对应题目就好啦,嘿嘿~姐姐是不是还有点小贴心呢?
° · 🛸 🌏 ° 🌘 • .° ✯✯ ★ *° 🛰 °· . • °★ •
▁▂▃▄▅▆▇▇▆▅▄▃▁▂▃.
目录
2.设R={A,B,C,D},F={A→B,A→C,C→D},ρ={ABC,CD}。分解是否无损联接分解?试说明理由。
3.设关系模式R(ABC),函数依赖F={A→B,B→A,A→C}满足3NF还是满足BCNF,试说明理由。
7.设有关系模式R(A,B,C,D,E,G,K),其最小函数依赖集F={AB→C,B→DE,C→G,G→A}
数据库常考大题
一、应用题
1. 设有三个关系:
S(S#,SNAME,AGE,SEX)
C(C#,CNAME,TEACHER)
SC(S#,C#,GRADE)
试用关系代数表达式表示下列查询语句:
(1)检索至少选修两门课程的学生学号(S#)。
∏S# (σ1=4∧2≠5(SC×SC)
(2)检索全部学生都选修的课程的课程号(C#)和课程名(CNAME)。
∏C#,CNAME(C⋈(∏S#,C#(SC) ÷∏S#(S))
(3)检索选修课程包含“陈军”老师所授课程之一的学生学号(S#)。
∏S#(SC⋈∏C#(σTEACHER=’陈军’(C))
(4)检索选修课程号为k1和k5的学生学号(S#)。
∏S#, C# (SC) ÷∏C#(σC#=’k1’∨ C#=’k5’(C))
2.设教学数据库中有三个基本表:
学生表S(SNO,SNAME,AGE,SEX),其属性分别表示学号、学生姓名、年龄、性别。课程表C(CNO,CNAME,TEACHER),其属性分别表示课程号、课程名、上课教师名。选修表SC(SNO,CNO,GRADE),其属性分别表示学号、课程号、成绩。
有如下SQL查询语句:
SELECT CNO
FROM C
WHERE CNO NOT IN
(SELECT CNO
FROM S,SC
WHERE S.SNO=SC.SNO
AND SNAME='张三');
请完成下列问题:
(1)用汉语句子阐述上述SQL语句的含义。
答:查询张三同学没有选修的课程的课程号。
(2)用等价的关系代数表达式表示上述SQL查询语句。
答:πCNO(C)- πCNO (sSNAME='张三' (S)⋈SC) 或
πCNO(C)- πCNO (sSNAME='张三' (S⋈SC))
3.现有关系数据库如下:
学生(学号,姓名,性别,专业)
课程(课程号,课程名,学分)
学习(学号,课程号,分数)
分别用关系代数表达式和SQL语句实现下列1—5小题
(1)检索所有选修了课程号为“C112”的课程的学生的学号和分数;
解:SQL语句:
SELECT 学号,分数 FROM 学习 WHERE 课程号=’C112’
(SELECT 学号,分数 FROM 学习,WHERE 课程号=’C112’)
关系代数:
π学号,分数(课程号=’C112’(学习))
(π学号,分数,课程号=’C112’(学习)
(2)检索“英语”专业学生所学课程的信息,包括学号、姓名、课程名和分数;
SQL语句:
SELECT 学生.学号,姓名,课程名,分数
FROM 学生,学习,课程
WHERE 学习.学号=学生.学号 AND 学习.课程号=课程.课程号 AND 专业=’英语’
关系代数:
π学号,姓名,课程名,分数(π学号,姓名(专业=’英语’(学生))学习π课程号,课程名(课程))
(π学号,姓名,课程名,分数1分,π学号,姓名(专业=’英语’(学生))学习π课程号,课程名(课程)
(3)检索“数据库原理”课程成绩高于90分的所有学生的学号、姓名、专业和分数;
SQL语句:
SELECT 学生.学号,姓名,专业,分数
FROM 学生,学习,课程
WHERE 学生.学号=学习.学号 AND 学习.课程号=课程.课程号 AND分数>90 AND 课程名=‘数据库 原理’
关系代数:
π学号,姓名,专业,分数(π学号,姓名,专业(学生)(分数>90(学习))π课程号,课程名( 课程名=’数 据库原理’(课程)))
(π学号,姓名,专业,分数,π学号,姓名,专业(学生)(分数>90(学习))π课程号,课程名(课程名=’数据库原理’(课程))
(4)检索没学课程号为“C135”课程的学生信息,包括学号,姓名和专业;
SQL语句:
SELECT 学号,姓名,专业
FROM 学生
WHERE 学号 NOT IN
(SELECT 学号 FROM 学习 WHERE 课程号=‘C135’)
关系代数:
(π学号(学生)-π学号(课程号=‘C135’ (学习)))(π学号,姓名,专业(学生)
(π学号(学生)-1分,π学号(课程号=‘C135’ (学习)))(π学号,姓名,专业(学生)
(5)检索至少学过课程号为“C135”和“C219”的课程的学生的信息,包括学号、姓名和专业。
SQL语句:
SELECT 学号,姓名,专业 FROM 学生 WHERE 学号 IN
(SELECT X1.学号 FROM 学习 X1,学习 X2 WHERE X1.学号=X2.学号 AND X1.课程号=‘C135’AND X2.课程号=‘C219’)
关系代数:
(π学号,课程号(学习)÷π课程号(课程号=‘C135’∨课程号=‘C219’ (课程)))π学号,姓名,专业(学生)
(π学号,课程号(学习)÷π课程号(课程号=‘C135’∨课程号=‘C219’ (课程))1分,π学号,姓名,专 业(学生)
4.设学生教学数据库中,有两个基本表:
学生表:S(Sno, Sname, Sage, Ssex)
成绩表:SC(Sno, Cno, Grade)
现有如下SQL语句:
SELECT Sname FROM S INNER JOIN SC ON S.Sno=SC.Sno
WHERE Grade >= 60
请给出关系代数式和题目含义。
解答:
关系代数:
题目含义:查询成绩大于等于60分所有学生的姓名。
二、证明题
1.指出下列关系模式是第几范式?并说明理由。
(1)R(X,Y,Z)
F={X→Y,X→Z}
答:BCNF.R的候选码为X,而且F中每一个函数依赖的左部都包含了候选码X。
(2)R(A,B,C,D,E)
F={AB→C,AB→E,A→D,BD→ACE}
答:3NF.R的候选码是AB和BD,R中非主属性C和E都直接且完全函数依赖于候选码AB和BD,但存在主属性D对候选码AB的部分函数依赖,因此R最高属于3NF。
(3)R(W,X,Y,Z)
F={X→Z,WX→Y}
答:1NF。R的候选码为WX,则Y,Z为非主属性,又由于X→Z,因此F中存在非主属性对候选码的部分函数依赖。
2.设R={A,B,C,D},F={A→B,A→C,C→D},ρ={ABC,CD}。分解是否无损联接分解?试说明理由。
解:设R1=ABC,R2=CD
∵R1∩R2=C,R2-R1=D,而C→D(已知)
故R1∩R2→R2-R1成立
根据定理,分解ρ为无损联接分解
3.设关系模式R(ABC),函数依赖F={A→B,B→A,A→C}满足3NF还是满足BCNF,试说明理由。
解: 对于关系模式R(ABC),函数依赖F={A→B,B→A,A→C},
分析可知,该关系模式关键字为A。
同样由分析可得,该关系模式不存在非主属性B、C对关键字A的部分依赖和传递依赖现象, R∈3NF,但由于B→A(已知),而B不是关键字,
故该关系模式R∈BCNF不成立。
4.设有关系R和函数依赖F:
R(A,B,C,D,E),F = { ABC→DE,BC→D,D→E }。
试求下列问题:
(1)关系R的侯选码是什么?R属于第几范式?并说明理由。
答:关系R的候选码是(A,B,C),R∈1NF,因为R中存在非主属性D,E对候选码(A,B,C)的部分函数依赖。
(2)如果关系R不属于BCNF,请将关系R逐步分解为BCNF。
答:
首先消除部分函数依赖
将关系分解为:
R1(A,B,C) (A,B,C)为候选码,
R1中不存在非平凡的函数依赖
R2(B,C,D,E),(B,C)为候选码,
R2的函数依赖集为:F2={(B,C)→D,D→E}
在关系R2中存在非主属性E对候选码(B,C)的传递函数依赖,所以将R2进一步分解:
R21(B,C,D) ,(B,C)为候选码,
R21的函数依赖集为:F21 = {(B,C)→D }R22依赖集为:F22 = { D→E },D为候选码
在R1中已不存在非平凡的函数依赖,在R21、R22关系模式中函数依赖的决定因素均为候选码,所以上述三个关系模式均是BCNF。
5. 现有如下关系模式:借阅(图书编号,书名,作者名,出版社,读者编号,读者姓名,借阅日期,归还日期),基本函数依赖集F={图书编号→(书名,作者名,出版社),读者编号→读者姓名,(图书编号,读者编号,借阅日期)→归还日期}
(1)读者编号是候选码吗?
答:不是。
(2)写出该关系模式的主码。
答:(图书编号,读者编号,借阅日期)
(3)该关系模式中是否存在非主属性对码的部分函数依赖?如果存在,请写出一个。
答:存在。(图书编号,读者编号,借阅日期)→书名、(图书编号,读者编号,借阅日期)→作者名、(图书编号,读者编号,借阅日期)→出版社、(图书编号,读者编号,借阅日期)→读者姓名。
(4)该关系模式满足第几范式?并说明理由。
答:1NF。因为存在非主属性对码的部分函数依赖。
6.某工厂生产多种产品,每种产品由不同的零件组装而成,有的零件可用在不同的产品上。产品有产品号和产品名两个属性,零件有零件号和零件名两个属性。根据语义设计E-R模型,并将E-R模型转换成关系模式,要求关系模式主码加下划线表示。
解:E-R:
产品(产品号,产品名)
零件(零件号,零件名)
组装(产品号,零件号)
7.设有关系模式R(A,B,C,D,E,G,K),其最小函数依赖集F={AB→C,B→DE,C→G,G→A}
① 求模式R的所有候选码;
② 说明R不是2NF的理由,并把R分解成2NF模式集;
解:
①
L属性:B;R属性:DE;LR属性:A,C,G;NLR属性:K。
计算(B)+={DE},所以,B不能做为唯一的候选码,需要与LR属性联合;
计算(AB)+={ABCDEG},故ABK是候选码;
计算(BC)+={ABCDEG},故BCK是候选码;
计算(BG)+={ABCDEG},故BGK是候选码;
②
在上面的关系中,非主属性只有{DE},但存在函数依赖B→DE,即存在非主属性对码的部分函数依赖,故不是2NF;
将R分解成:
R1(A,B,C,G,K, AB→C,C→G,G→A)
R2(B,D,E, B→DE)
R1关系中的候选码仍为ABK,BCK,BGK,没有非主属性,故一定满足2NF;R2关系中候选码为B,主属性只有一个,故一定满足2NF
提示:
如何选出候选码?
1)只出现在左边的⼀定是候选码
2)只出现在右边的⼀定不是候选码
3)左右都出现的不⼀定
4)左右都不出现的⼀定是候选码
5)再求确定的候选码的闭包,如果可以推出全部,那么当前确定的就是候选码
三、程序设计题
1.设有如下4个关系模式:
S(SN,SNAME,CITY)
P(PN,PNAME,COLOR,WEIGHT)
J(JN,JNAME,CITY)
SPJ(SN,PN,JN,QTY)
其中:S表示供应商,SN为供应商编码,SNAME为供应商名字,CITY为供应商所在城市;P表示零件,PN为零件编码,PNAME为零件名字,COLOR为零件颜色,WEIGHT为零件重量;J表示工程,JN为工程编码,JNAME为工程名字,CITY为工程所在城市;SPJ表示供应关系,QTY表示提供的零件数量。
写出实现以下各题功能的SQL语句:
(1)取出所有工程的全部细节。
SELECT *
FROM J;
(2)取出所在城市为南京的所有工程的全部细节。
SELECT *
FROM J
WHERE CITY=’南京’;
(3)取出为所在城市为上海的工程提供零件的供应商编码。
SELECT DISTINCT SN
FROM SPJ
WHERE JN IN
(SELECT JN
FROM J
WHERE CITY=’上海’);
(4)取出为所在城市为上海或北京的工程提供红色零件的供应商编码。
SELECT SN
FROM SPJ
WHERE JN IN
(SELECT JN
FROM J
WHERE CITY=’上海’ OR CITY=’北京’)
AND PN IN
(SELECT PN
FROM P
WHERE COLOR=’红’)
(5)取出供应商与工程所在城市相同的供应商提供的零件编码。(3分)
SELECT SPJ.PN
FROM S,J,SPJ
WHERE S.SN=SPJ.SN AND J.JN=SPJ.JN AND S.CITY=J.CITY;
(6)取出至少由一个和工程不在同一城市的供应商提供零件的工程编码。
SELECT DISTINCT SPJ.JN
FROM S,J,SPJ
WHERE S.SN=SPJ.SN AND J.JN=SPJ.JN AND S.CITY<>J.CITY;
(7)取出上海供应商不提供任何零件的工程编码。
SELECT JN
FROM J
WHERE JN NOT IN
(SELECT DISTINCT JN
FROM SPJ
WHERE SN IN
(SELECT SN
FROM S
WHERE CITY=’上海’));
(8)取出所有这样的一些<CITY,CITY>二元组,使得第1个城市的供应商为第2个城市的工程提 供零件。
SELECT S.CITY,J.CITY
FROM S,J,SPJ
WHERE S.SN=SPJ.SN AND J.JN=SPJ.JN;
2.某医院病房计算机管理中需要如下信息:
科室:科室名,科地址,科电话,医生姓名;
病房:病房号,床位号,所属科室名;
医生:姓名,职称,所属科室名,年龄,工作证号;
病人:病历号,姓名,性别,年龄,主管医生,病房号;
其中,一个科室有多个病房,多个医生,一个病房只能属于一个科室,一个医生只属于一个科室,但可负责多个病人的诊治,一个病人的主管医生只有一个。
要求:画出该计算机管理系统的E-R图。
解:
(1)在教学管理数据库中有学生、课程和选课三个表,它们的定义分别为为:
Student(Sno Char(5),Sname Char(6),Ssex Char(2),
Sage Int,Sdept Char(2))
Course(Cno Char(1), Cname Char (10), Cpno Char(1),
Ccredit Int)
SC(Sno Char(5), Cno Char(1), Grade int)
根据下面的要求,写出SQL语句。
① 用SQL语句建立数据表SC,以(Sno, Cno)作为主键;
用SQL语句建立数据表SC,以(Sno, Cno)作为主键
CREATE TABLE SC (
Sno CHAR(5),
Cno CHAR(1),
Grade INT,
PRIMARY KEY (Sno,Cno)
);
② 向Student表插入一条记录(95011, 张三, 女, 19,CS);
INSERT INTO Student VALUES('95011', '张三', '女', 19, 'CS');
③ 检索计算机系(CS)所有女同学的姓名和年龄;
SELECT Sname, Sage FROM Student
WHERE Sdept='CS' AND Ssex='女';
④ 检索选修了2号课程学生的学号、姓名、成绩,并按成绩降序排序;
SELECT Student.Sno, Sname, Grade
FROM Student INNER JOIN SC ON Student.Sno=SC.Sno
WHERE SC.Cno='2'
ORDER BY Grade DESC
⑤ 建立一个信息系(IS)所有不及格(Grade<60)学生的视图vwStudent。
CREATE VIEW vwStudent AS (
SELECT Student.*
FROM Student INNER JOIN SC ON Student.Sno=SC.Sno
WHERE Sdept='IS' AND Grade < 60
)
3.设有如下信息:
下列E-R图是反映产品与仓库两实体间联系的信息模型,要求:
(1)给出该E-R图的关系数据库模式,并指出相应的关键字。
解:
关系数据库模式:
仓库W(仓库号W#,仓库名WN,地址WA) 关键字:W#
产品P(产品号P#,产品名称PN,规格PS,型号PM) 关键字:P#
存放L(仓库号W#,产品号P#,数量QTY) 关键字:(W#,P#)
(2)若仓库号、仓库名及仓库地均为字符型且长度均为10,用SQL语言为仓库关系建立相应的基表并说明实体完整性规则。
解:CREATE TABLE W(W# CHAR(10) PRIMARY KEY,
WN CHAR(10),
WA CHAR(10))
(3)将仓库基表的查询权限授予所有用户,收回User3对仓库的查询权限。
解:GRANT SELECT ON W TO PUBLIC
REVOKE SELECT ON W FROM User3
4.现有如下E-R图:
实体的主要属性如下,其中下划线部分为主码:
仓库(仓库号,仓库名,面积,货位数)
零件(零件号,零件名称,规格型号,计量单位,供货商号,价格)
库存(?,?,库存量)
(1)请在?处填上相应的属性。
(2)试用SQL定义上述E-R图中所有的实体、属性及联系,所对应的英文名称为:
Warehouse(wno,wname,square,cou)
Material(mno,mname,type,unit,cusnum,price)
Storage(?,?,storenumber),要求反映主码和外码,其中的类型长度可以根据需要自行确定。
(3)用SQL与关系代数表示查询:找出零件名为“镙丝”的零件号、所存放的仓库号、库存量。
(4)建立一个包含仓库号、仓库名、零件号、零件名、价格、库存量的视图VIEW1。
答: 仓库号 零件号
建立仓库表
Create table warehouse
(
wno varchar(10) primary key,
wname varchar(20),
square number(10,2),
cou int)
建立零件表
Create table material
(
mno varchar2(10) primary key,
mname varchar2(20),
type varchar2(10),
unit varchar2(10),
cusnum varchar2(10),
price number(10,2))
建立库存表
Create table storage
(
wno varchar2(10) foreign key references warehouse(wno),
mno varchar2(10) foreign key references material(mno),
storenumber number(10,2),
primary key(wno,mno))