三.数据库论述题真题
1.(1997年)本题要求设计一个学生试卷成绩输入、查询和成绩单输出系统(简称SRS)的数据结构和算法要点。问题描述如下:
要输入到SRS系统中的每一份试卷成绩反映一个学生选修一门课程的考试结果,它包括以下数据项:学号、姓名、课程名、成绩。由于实行了灵活的选课制度,所以每个学生选修多少门课程,选修哪些课程都可以不同。要输入的多份试卷成绩并未按任何数据项排列顺序,它们以任意的顺序被输入到系统中来。
SRS系统要具有以下功能:①试卷成绩插入,将试卷成绩逐个插入到SRS系统的数据结构中。②学生成绩查询,给出学号查该学生所选修的各门课程的考试成绩。③成绩单输出,按学号递增的顺序依次输出所有学生的学号、姓名,及其所选修的各门课程的课程名和成绩。(为简单起见,假设上述所有工作都在计算机内存中进行。)
请设计SRS系统的数据结构和算法要点,使上述三项操作都有较高的执行效率。从以下方面阐述你的设计:
(1)SRS系统的数据结构(15分)
①数据结构的Pascal语句描述
②数据结构的示意图
③数据结构的简单文字说明
(2)SRS系统的算法要点(10分)
(只要简单的文字说明,不必写出Pascal程序)
①试卷成绩插入
②学生成绩查询
③成绩单输出
(3)简单陈述你的上述设计的理由(5分)
答案:
本题可有多种不同的设计方案,下面给出其中一个较好的方案。
(1)数据结构(15分,其中对三种操作的有效支持各4分,叙述的条理性3分。)
①数据结构的Pascal语句描述
TYPEpptr=↑pnode;
pnode=RECORD
cname:string;
score:0..100;
next:pptr
END;
sptr=↑pnode;
snode=RECORD
sno:integer;
sname:string;
llink,rlink:sptr;
plink:pptr
END;
V ARt:sptr;
②数据结构的示意图
t
③数据结构的简单文字说明
每个学生结点包含学生的学号和姓名,所有学生结点组织成一棵二叉排序树,用
link-rlink法存储。
每份试卷成绩作为一个链表结点,包含课程名和成绩,每个学生的所有试卷成绩
结点链接成一个单链表,并且二叉排序树的学生结点中有一个指针指向该单链表
的第一个结点。
(2)算法要点(10分,三种操作各3分,叙述的条理性1分)
①试卷成绩插入,根据试卷的学号在二叉排序树中查该学生结点。若到,则在该
学生结点所指的成绩链表中插入一个成绩结点;若未到,则先在二叉排序树中
插入一个新的学生结点,然后再往这个学生结点所指的(空的)成绩链表中插入
一个成绩结点。
②学生成绩查询,根据所给学号在二叉排序树中查该学生结点,再在该结点所指的
成绩链表中沿着指针读出所有成绩。
③成绩单输出。对二叉排序树进行对称序周游,在访问到每个学生结点时输出该结点
指向的成绩链表中的所有成绩。
(3)设计理由(5分)
①学生结点组织成二叉排序树,使三种操作都有较高的效率:插入n个学生结点
O(nlog2n),查一个学生结点O(log2n),输出所有学生结点O(n)。
②每个学生的所有成绩结点组织成链表,动态申请空间,适合于每个学生选修的课程
数不等的实际情况,节省空间。
2.(1998年)
人们在管理实践中发现,数据库技术是信息资源的整理、保存、管理和使用的最有效的手段。数据库按
其数据结构模型分类,通常可分为层次型数据库、网络型数据库、关系型数据库和面向对象型数据库,各种类似的数据模型都有自身的特点。试从关系数据模型的优点和弱点论述:
(1)为什么人们在开发以事务处理为主的信息系统(例如管理信息系统)时,大多选用关系
型数据库作为开发环境?(18分)
(2)在许多含有复杂数据结构或丰富语义的实际应用领域中,为什么要选用面向对象数据库或要对关系型数据库作某些扩充和修改?(12分)
答案:
(1)首先,关系数据模型结构简单,为二维表格结构与目前事务处理系统中数据多以二维表
格结构组织和表示相适应。(10分)
其次,关系数据模型的其他优点也适应事务处理的要求:
①表格是一集合,因此集合论等知识可以引入关系型数据模型中,使它具有坚实的数学
理论基础。(4分)
②有简单、易懂`易学的关系数据库的标准语言SQL的支持。(2分)
③数据具有较高的独立性。(2分)
(2)在含有复杂数据结构或丰富语义的实际应用领域中,一般选用面向对象数据库,或要对
关系数据库作某些扩充和修改是因为:
①关系数据模型不擅长于表示复杂对象数据类型。(4分)
②也不擅长于表示实体间的语义联系。(4分)
③而面向对象数据模型在这两方面有优势。(4分)
3.(2000年)设计一个用于管理会议室的数据库。经调查分析,得到的数据项列出如下:
房间号r#CHAR(4),部门号d#CHAR(3),部门名称dnameCHAR(20),
房间容量contentINT,部门主管dmanagerCHAR(8),开会日期mdateDA TE,
会议名称cnameCHAR(20),会议主题(subject)CHAR(80),会议类型(type),
部门人数dnumINT,当前房间状态stateCHAR(1),
并确定以会议室(room)信息,部门(department)信息,会议(conference)信息为实体,它们通过“开会(meeting)”联系起来。为了简化问题做如下假定:
●会议以部门召开,但一个部门在同一会议室不能重复召开同一个会议。
●会议室按部门借用,且不预借。
●当前房间状态取值为‘1’表示该会议室当前正在开会,取值为‘0’表示该会议室
当前未被借用。
关系型数据库系统有哪些数据库概念设计的只包含主键属性的简化E-R图如下:
要求:
⑴数据库的逻辑结构设计:给出相应的表名、表的属性名(数据类型可省)、主键。(14
分)
⑵给出下列查询的SQL语句:(16分,每小题4分)
a)当前未借用的会议室(房间号)和容量:
b)2000年4月8日有哪些部门(部门名称)在开会?他们的主管是谁?
c)2000年4月8日‘信息中心’在哪个会议室(房间号)开会?会议名称和主题是
什么?
d)当前能够适合‘信息中心’开会的有哪些会议室(房间号)?
答案:
(1)数据库的逻辑结构设计(给出相应的表名,表结构,主键;(14分)
room(r#,content,state)主键:r#(3分)
department(d#,dname,dmanager,dnum)主键:d#(3分)
conference(cname,subject,type)主键:cname(3分)
meeting(r#,d#,cname,mdate)主键(r#,d#,cname)(5分)
(2)给出下列查询的SQL语句:(16分,每小题4分)
a)当前未借用的会议室(房间号)和容量:
selectr#,contentfromroomwherestate='0'
b)2000年4月8日有哪些部门(部门名称)在开会?他们的主管是谁?
Selectdname,dmanagerfromdepartmentd,meetingm
whered.d#=m.d#andmdate='2000年4月8日'
Selectdname,dmanagerfromdepartmentd
whered.d#=in(selectm.d#=frommeetingmWheremdate='2000年4月8日')
c)2000年4月8日'信息中心'在哪个会议室(房间号)开会?会议名称和主题是什么?
Selectr#,mame,subjectfromdepartmentd,meetingm,conferencec
whered.d#=m.d#andmame=cameand
Mdate='2000年4月8日'anddname='信息中心'
或(注:本题中Selectr#,came,......也可以是Selectr#,mame,......
Selectr#,came,subjectfrommeetingm,conferencec
WhereMdate='2000年4月8日'andmame=cameand
m.d#=(selectd.d#fromdepartmentdwheredname='信息中心')
d)当前能够适合'信息中心'开会的有哪些会议室(房间号)?
Selectr#fromroomwherestate='O'and
content>=(selectdnumfromdepartmentwheredname='信息中心')
4.(2001年)
(l)、为了维护数据库的参照完整性,当删除被参照关系的元组时,系统可能采取哪些做法?(15分)
(2)、若有学生关系S(S#,SNAME,SEX,AGE),其主键为S#;选课关系SC(S#,C#,GRADE),
其主键为(S#,C#),且S.S#=SC.S#。假定学生号为‘01001’的学生离开学校不再回来了,为此若删除关系S中S#=‘01001’的元组时,如果关系SC中有4个元组的S#=‘01001’,应该选用哪一种做法?为什么?(15分)
答案:
(1)、为了维护数据库的参照完整性,当删除被参照关系的元组时,系统可能采取如下
三种做法(每种做法得5分):
l)级联删除(cascades):即,当删除被参照关系的元组时,同时将参照关系中所有外
键值与被参照关系中要被删除元组的主键值相等(相对应)的元组一起删除。
2)拒绝删除(restricted):即,只当参照关系中没有任何元组的外键值与被参照关系
中要被删除的元组的主键值相等(相对应)时,系统才执行该删除操作,否则拒绝
执行该删除操作。
3)置空值删除(nullfies):即,当删除被参照关系的元组时,同时将参照关系中所有
与被参照关系中要被删除元组的主健值相等(相对应)的外键值都置为空值。
(2)、对于本题的情况,应该选用第一种做法。即,将关系SC中S#=‘01001’的4个
元组也一起删除。(得10分)
因为当一个学生离开学校不再回来,他的个人信息记录若从S关系中删除了,那么他的选课信息记录就没有保存的必要,也应随之从SC关系中删除。(得5分)
5.(2002年)为学校中学生选课管理这个现实问题进行数据库模式设计。根据调查分析,确定它的属性集合为:
U={S#,C#,SNAME,CNAME,TEACHER,GRADE,SD}
下面给出两种确定的模式设计方案:
方案一:只有一个关系模式:
R(S#,C#,SNAME,CNAME,TEACHER,GRADE,SD)
方案二:如果根据属性之间存在的联系或相关性,建立如下三个关系:
S(S#,SNAME,SD),C(C#,CNAME,TEACHER),SC(S#,C#,GRADE)
(1).试分析这两种模式设计方案各自的优缺点。(26分)
(2).通常情况下你认为哪种方案更“好”些?请说明理由。(4分)
答案:
对一个现实问题,进行关系数据库模式设计,通常其设计结果不是唯一的。每个方案有各自的优缺点。对本题可以得到如下的分析结果:
对方案一:这个关系模式存在如下问题:(每个问题4分,共16分。若只给出问题,没有说明得2.5分)
(1).数据存在大量冗余。例如:(至少给出1项)
S#,SNAME,SD要重复“每个学生选修的课程数”
C#,CNAME,TEACHER要重复“学生选修这门课的人数”
(2).更新异常。由于数据存在大量冗余,容易引起更新异常。例如,当更新某门课程的教师时,由于数据存在大量冗余,可能造成与这门课程有关的元组中,一部分元组的TEACHER 的值被更新,而另一部分元组的TEACHER的值未被更新。
(3).插入异常。显然,这个关系的主键是S#和C#。由于主键属性值不能为空值,当登记学生信息时,由于该学生尚未选课,C#未确定,该学生的其他信息也无法登入,这不是我们的意愿。
(4).删除异常。如果某些课程因故删除了,则只选修这些课程的学生信息也被删除了,这往往也不是我们的本意,我们并不希望删除这些学生的信息。
对方案二:如果根据属性之间存在的联系或相关性,建立了三个关系,则方案一中存在的异常现象被消除了。(得5分)
但对诸如“查张三的数据库技术课程的成绩”之类的问题时,这需要连接这三个关系才能完成,这个查询代价高而且会影响效率。(得2.5分)
相比之下,第一个方案则可直接投影、选择就可以完成这类查询,不需要连接操作,显然代价低而且效率高。(得2.5分)
比较这两种设计方案:本人认为第二种设计方案虽然对某些查询问题连接操作较多,但它仍比第一种方案“好”,因为它不存在上述异常问题。(得4分)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。