三、设计与应用题(共30分)
1.设有高校选课系统,需要对学校的系信息、教师信息、课程信息、学生信息、学生选课信息进行管理。已知系(DEPT)信息包括系编号(DeptNO)、系名称(DeptName);教师(Teacher)信息包括教师号(TNO)、教师名(Tname);课程(Course)信息包括课程号(CNO)、课程名(CName)、课程学分(Credit);学生(Student)信息包括学号(SNO)、学生姓名(Sname)、学生性别(Sex)。
选课系统的管理规则如下:
Ⅰ.一个系可聘用多名教师,一个教师只受聘于一个系;
Ⅱ.一个系可有多名学生,一个学生只属于一个系;
Ⅲ.一名教师可讲授多门课程,一门课程可由多名教师讲授;
Ⅳ.一名学生可选修多门课程,一门课程可被多名学生选修;
V.学生选修完课程后,可获得相应课程的成绩。
针对以上描述,完成下列设计内容:
(1)构建选修课系统的ER图。(要求图中的实体集名用试卷中给出的英文名,联系所关联的实体集名的首字母,字母问用“一”或“_”连接,大小写不限)。(6分)
(2)根据所构建的ER图,设计满足3NF的关系模式,并标出每个关系模式的主码和外码。(要求关系模式名同实体集名或联系名,属性名用试卷中给出的英文名,大小写不限)(4分)
2.某书店采用了SQL Server 2008数据库管理系统,该书店有一个需求,需要统计指定年份中每一本书的销售总额,例如:查询2012年所有书的销售总额。
已知图书结构如下:
图书表(书号BOOK_ID,书名BOOK_NAME,单价BOOK_PRICE)
销售表(书号BOOK_ID,销售时间SALE_TIME,销售数量SALE_NUM)。
假设单价和销售数量均为int型,书号和书名均为varchar(50)类型,销售时问为datetime型。请给出满足如下要求的多语句表值函数,该函数统计指定年份中每本书的销售总额。(10分)设函数名为:BOOK_PROFIT(@year int),函数的返回结果格式如下:
书号销售总额
B001 60000
A004 50000
3.某网上商城因为业务发展,原有的系统不能很好的满足需要,因此采用了一套新的经营管理系统,此系统使用SQL Server 2008数据库管理系统。此系统上线运行前,需将商场原有的数据导入到新系统中。原有系统使用SQL Server 2000,数据结构与新系统不完全一致。因此需要把数据从SQL Server 2000导入到SQL Server 2008中,为了保证数据一致性,数据导入过程中要求暂停业务且必须在3小时内完成。
(1)在原有数据导入新系统的过程中,实施人员发现原有数据量很大,导人数据需要四小时,业务无法接受。经分析某工程师认为,数据导入过程中的数据库I/O很高,但导人数据的程序本身对系统资源占用率很低。该工程师建议将数据导入过程中的数据恢复模式从“完整”模式改为“简单”模式以提高数据导人速度;而另一位工程师则认为此方法未必能提高数据导入速度,而且还可能导致数据丢失,不建议使用此方法。
请分析此方法是否能够提高数据导入速度并给出理由,同时分析此操作的数据丢失风险。(5分)
(2)在成功导入历史数据后,此系统顺利上线运行。在上线运行的第一周,发现数据库服务器的CPU使用率很高,达到近90%,高峰期间达到100%,且系统内存占用率达到90%,但系统I/O很轻。业务人员反应系统操作速度很慢。为了提高系统运行速度。在不修改应用程序的前提下,两位工程师提出了不同的解决办法:
Ⅰ.为服务器增加2颗CPU,缓解CPU使用率很高的问题;
Ⅱ.为服务器增加一倍内存,缓解内存使用率很高的问题。
考虑成本,现阶段只能按照一种方案实施。请指出在现有情况下,哪种方案更合理并给出理由。(5分)
三、设计与应用题
1.【解题思路】
(1)ER图的画法
建立相应的ER图的过程如下:
第一,确定实体类型。本题有四个实体类型,即Teacher实体,Course实体,Student实体和DEPT实体。
第二,确定联系类型。Teacher实体与Course实体之间是多对多关系,即T-C关系,Student实体与Course实体之间是多对多关系,即S-C关系。DEPT实体与Teacher实体之间是一对多关系,即D-T关系。DEPT实体与Student实体之间是一对多关系,即D-S关系。
第三,把实体类型和联系类型组合成ER图。
第四,确定实体类型和联系类型的属性。
Teacher实体集属性:教师号、教师名
Course实体集属性:课程号、课程名、课程学分
Student实体集属性:学号、学生姓名、学生性别
DEPT实体集属性:系编号、系名称
(2)ER模型转换为关系模式的规则
①把ER模型中的每一个实体集转换为同名的关系,实体集的属性就是关系的属性,实体集的码就是关系的码。
②把ER模型中的每一个联系转换成一个关系,与该联系相连的各实体集的码以及联系的属性转换为关系的属性。关系的码根据下列情况确定。
若联系为1:1,则每个实体集码均是该关系的候选码。
若联系为1:n,则关系的码为n端实体集的码。
若联系为m:n,则为各实体集码的组合或其中一部分实体集码的组合。
③合并具有相同码的关系。根据规则,把一个ER模型转换为关系模式,一般经历下面两个步骤:
第一,标识ER模型中的联系。
第二,依次转换与每个联系相关联的实体集及联系。
【参考答案】
ER图如下所示:
设计3NF,如下:
DEFY(DeptN0,DeptName),主码:DeptN0,无外码
Teacher(TN0,TName,DeptNO),主码TN0,外码DeptNO
Student(SN0,SName,Sex,DeptNO),主码SN0,外码DeptNO
Course(CN0,CName,Credit),主码CN0,无外码
T-C(TN0,CNO),主码(TN0,CNO),外码TN0,CNO
S-C(SN0,CN0,成绩),主码(SN0,CNO),外码SN0,CNO
2.【解题思路】
采用JOIN联合查询,先用WHERE条件查出符合销售时间=@year的记录,再将找出的记录和图书表合并,并采用单价*销售数量计算出联合查询的表数据,最后根据GROUP BY统计每种书的销售价格总和。
【参考答案】
CREATE FUNCTION BOOK_PROFIT(@year int)
RETURNS@f_BOOK_PROFIT table(
书号varchar(50),
销售总额int)
AS
BEGIN
INSERT INTO@f_BOOK_PROFIT
SELECT a书号,SUM(a单价*b销售数量)
FROM图书表a JOIN销售表b ON a书号=b书号
WHERE year(b销售时间)=@year
GROUP BY a.书号
RETURN
END
或者
CREATE FUNCTION BOOK_PROFIT(@year int)
RETURNS@f_BOOK_PROFlT table(
BOOK_ID varchar(50),
PROFIT int)
AS
BEGIN
INSERT INTO@f_BOOK_PROFIT
SELECT a.BOOK_ID,SUM(a.BOOK_PRICE*b,SALE_NUM)
FROM BOOK a JOIN SALE b ON a.BOOK ID=b.B00K ID
WHERE year(bSALE_TIME)=@year
GROUP BY a.BOOK_ID
RETURN
END
3.【解题思路】
(1)SQL Server 2008的数据恢复模式有三种:
①简单恢复模式,此方法可以幅度减少事务13志的管理开销,因为恢复模式不备份事务日志。但是如果数据库损坏,则简单恢复模式将面临极大的数据丢失风险。在这种恢复模式下,数据只能恢复到最新备份状态。因此对于用户数据库,简单恢复模式只适用于测试和开发数据库,或用于主要包含只读数据的数据库。
②完整恢复模式,此方法可以完整的记录所有事务,并将事务13志记录保留到对其备份完毕为止。此方法相对简单恢复模式来说,更占用时间。
③大容量日志恢复模式,此方法只对大容量操作进行最小记录,使事务日志不会被大容量加载操作所填充。
在数据导入过程中,所有的业务都是暂停的,因此可以采用简单恢复模式提高数据导入速度。且只在数据导入的过程中暂时的修改恢复模式,因此数据并不会丢失。
(2)提高数据库性能的方法一般是从外部环境、调整内存分配、调整磁盘I/0、调整竞争资源等几方面着手来改变数据库的参数。SQL Server 2008采用将数据缓冲在内存的方式,因此在数据库系统运行的过程中会占用一定的内存,又因为I/O并不存在问题,说明内存尚满足需求。CPU使用率很高,表明CPU的计算能力不足,应该增加CPU的数量。
【参考答案】
(1)此方法能够提高数据导入速度。原因:此系统I/O很高,修改恢复模式后,系统限度减少日志开销,可提高导入速度。由于仅在数据导入过程中修改恢复模式,所以并无数据丢失风险。
(2)第一种方案比较合理。原因:SQL Server 2008采用将数据缓冲在内存的方式,因此内存的使用率比较高是正常情况,且现阶段I/O并不存在问题,表明内存满足需求。此阶段CPU使用率很高,表明CPU计算资源不足,因此增加CPU数量对解决问题有效。
2017年计算机三级《网络技术》设计与应用试题及答案3.doc