南京理工大学《数据库系统基础教程》试题和答案(二)

发布时间:2016-04-28 10:04 分类:历年真题

南京理工大学《数据库系统基础教程》试题和答案(二),卓越考研特整理南京理工大学考研真题,为广大考生提供有效的信息支持。

 

 

 

综合题40 
一个简化的图书馆信息管理系统。系统需求如下:  1.图书馆有若干管理员librarian,各自有员工号empid、姓名name、身份证号idno等属性。  
2.图书馆中备有若干种图书booktype,每种图书有ISBN、名称title、出版社publisher、作者writers、
价格price等属性,每种图书有唯一的ISBN号,同种图书可购入多本。 
3.每一本图书book有唯一标记bookid和种类booktype。 
4.读者reader在办理借书证后方可借阅。一个读者有唯一的借书证号cardno,还有姓名name、身份证号idno、住址address、注销标记logoff等。读者在注销之前,须归还所有已借图书或报失。 
5.需处理以下基本业务: 
①借书:在某时刻某读者通过某管理员借阅某一本书。 ②还书:在某时刻通过某管理员归还某一本书。 
③报失:在某时刻某读者向某管理员报失某一本书;报失之后该书不能再借。 
  
每一次还书和报失记录都须对应某一次借书记录,且可由不同管理员处理。 
 
按次序回答下列问题: 
1.用E/R图建立该系统的数据库模型。为每个实体集确定键属性,并确定每个联系的多重性。(8) 2.由E/R模型建立该系统的关系模式,并确定每个关系的主键和可能的外键。注意各关系中的函数依赖和多值依赖,并使你的关系能符合更高范式。(8) 3.基于以上关系模式,用关系代数表示下面计算:(6) 1) 计算“清华大学出版社”出版的图书名称及作者。 2) 计算借书证号为“A00345”的读者未归还的图书名称。 3) 计算未处理过借书手续的管理员的员工号及其姓名。 4.使用SQL语言实现上述计算,并使输出结果不重复。(6) 5.使用SQL语言完成下面的计算:(12) 
1) 增加借书记录: 借书证号为'A00345',通过管理员'E0035'于当前日期借到图书'B00124'。(提示:today(*)函数返回当前日期) 
2)还书记录:通过管理员'E0034'于当前日期归还图书'B00124'。(提示:还书无需确认借书证) 3)计算借书证号为“A00345”的读者已借超过30天而未还的图书数量。(提示:days(d1,d2)函数返回从日期d1到d2的天数) 
4)计算借书次数最多的读者的姓名和身份证号。(注意使用视图) 

5)计算所有图书的ISBN、书名、借阅次数,并按借阅次数从大到小排列。(注意使用外连接)

3.关系代数运算 
1) 计算“清华大学出版社”出版的图书名称及作者 
πtitle,writers(σpublisher=’清华大学出版社’Booktype)
2) 计算借书证号为“A00345”的读者未归还的图书名称 
πtitle(σcardno=’A00345’AND end=NULL(Record∞Book∞Booktype)) 3) 计算未处理过借书手续的管理员的员工号及其姓名。 
πempid,name(Librarian) -πempid,name(Librarian∞brwempid=empidRecord)  
4.SQL运算 
1) 计算“清华大学出版社”出版的图书名称及作者 
Select title,writers From Booktype Where publisher=’清华大学出版社’; 2) 计算借书证号为“A00345”的读者未归还的图书名称 
Select title 
   From Record Natural Join Book Natural Join Booktype    Where cardno=’A00345’ AND "end" IS NULL; 3) 计算未处理过借书手续的管理员的员工号及其姓名。 
Select empid,name  From Librarian 
Where empid NOT IN(Select brwempid From Record);  5.SQL 
1) 增加借书记录: 借书证号为'A00345',通过管理员'E0035'于当前日期借到图书'B00124'。(提示:today(*)函数返回当前日期) 
insert into record(brwempid, cardno,bookid,borrowdate) values('E0035','A00345','B00124',today(*)); 
2) 还书记录:通过管理员'E0034'于当前日期归还图书'B00124'。(提示:还书无需确认借书证) 
update record set "end" = 1, enddate= today(*),endempid='E0034'  where recid =  
(select recid from record where bookid='B00124' and "end" IS NULL); 3) 计算借书证号为“A00345”的读者已借超过30天而未还的图书数量。(提示:days(d1,d2)函数返回从日期d1到d2的天数) 
Select Count(recid) From Record 
Where cardno='A00345' AND "end" IS NULL
AND  days(borrowdate,today(*))>30; 
4) 计算借书次数最多的读者的姓名和身份证号。(注意使用视图) 
Create view brwtimes as 
select cardno,count(recid) as times from record group by cardno select name,idno 
from reader natural join brwtimes 
where times=(select max(times) from brwtimes);

 

成功学员

Successful students
  • 王庆杰中国人民大学
  • 何娟南京大学
  • 吴文聪中国政法大学
  • 李佑哲中央音乐学院
  • 王振清华大学
  • 伍厚至清华大学