数据库习题答案

更新时间:2024-03-24 16:10:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第1章 认识数据库

1.简述数据管理及数据管理技术经历的主要阶段。

参考答案:数据管理是指对数据进行分类、组织、编码、存储、检索和维护等操作,它是数据处理的中心问题。数据管理技术经历了三个阶段:人工管理阶段、文件系统阶段和数据库系统阶段。

2.简述文件系统的主要缺点。

参考答案:(1)数据共享性差、冗余度高;(2)数据独立性差;(3)编写应用程序生产率不高;(4)文件之间数据孤立;(5)不支持并发(Concurrent)访问;(6)数据的安全性(Security)控制不够灵活。

3.简述数据库系统的特点。

参考答案:(1)数据一体化、结构化;(2)数据共享性高、冗余度低,易扩充;(3)数据独立性高;(4)数据由DBMS统一管理和控制,提供更好的安全和保护。

4.解释数据库、数据库管理系统、数据库系统的基本概念。

参考答案:数据库是长期存储在计算机内的、有组织的、可共享的综合性数据集合。数据库中的数据按照一定的模型组织、描述和存储,具有较小的数据冗余度、较高的数据独立性和易扩展性,并为各种用户所共享。

数据库管理系统(DBMS)是数据库系统的核心,是介于操作系统和用户应用程序之间的一层数据管理软件,是一个帮助用户创建和管理数据库的程序集合。

数据库系统(Database System,DBS)是指在计算机系统中引入数据库后构成的系统。主要包括四个部分:数据库、硬件系统、软件系统和人员。

5.简述DBMS的主要功能。

参考答案:(1)数据定义;(2)数据的组织、存储和管理;(3)数据操纵;(4)数据库运行管理;(5)数据库的建立和维护;(6)数据通信与转换。

6.简述DBA的主要职责。

答:(1)决定数据库中的信息内容和结构;(2)决定数据库的存储结构和存取策略;(3)定义数据库的安全性要求和完整性约束条件;(4)监督和控制数据库的运行;(5)数据库的改进和重组重构。

7.简述数据库的三级模式结构包括那几部分。 参考答案:外模式、模式和内模式。

8.试说明数据库三级模式结构中的映像功能及其与数据独立性的关系。

参考答案:(1)外模式/模式间的映像,保证数据的逻辑独立性;(2)模式/内模式间的映像,保证数据的物理独立性。

9.分别说明C/S和B/S应用程序结构的优点。

参考答案:C/S结构的优点:(1)交互性强;(2)具有安全的存取模式;(3)网络通信量低;(4)响应速度快。

B/S结构主要具有以下两方面优点:(1)维护和升级方式简单;(2)异地浏览和信息采集的灵活性好。

10.为体育部门建立的数据库中要存储运动队、运动员、运动项目以及运动员参加运动队和运动项目比赛情况,其中运动队、运动员、运动项目应包含如下信息:

(1)运动队:队名、主教练,其中队名唯一标识运动队。

(2)运动员:运动员编号、姓名、性别、年龄,其中运动员编号唯一标识一名运动员。 (3)运动项目:项目编号、项目名、所属类别,其中项目编号唯一标识一个项目。 这里规定,每个运动队有多名运动员,每名运动员只属于一个运动队;每名运动员可以参加多个项目,每个项目可以有多个运动员参加。系统记录每名运动员参加每个项目所得名次和成绩以及比赛日期。

根据以上叙述,为体育部门建立E-R模型,要求标注联系类型。 参考答案:E-R模型如下:

?????1?????n??m??????n??????????????????????????????11.设某图书管理系统需要存储有关出版社、作者、图书以及作者的著书情况。出版社、作者和图书应包含的信息如下:

(1)出版社:出版社编号、出版社名称、地址、电话 (2)图书:图书编号、书名、定价、字数 (3)作者:作者编号、姓名、单位、职称、电话

再给出如下语义和要求:每个出版社出版多种图书,每种图书有唯一的图书编号,且每种图书只能由一个出版社出版,每个出版社出版一种图书应记录其出版时间;一种图书有多名作者,每一个作者可能编著多种图书,每个作者编著一种图书应记录作者排序(即该书中作者的次序,如第一作者、第二作者等)。

试根据上述表述为该系统设计ER模型,要求标注联系的类型。 参考答案:E-R模型如下:

??????????1????????n??m????n?????????????????????????????

12.简述数据模型的三要素。

参考答案:数据模型通常包括数据结构、数据操作和完整性约束三个要素。 13.请给出几种常见的数据(逻辑)模型。

参考答案:层次模型、网状模型、关系模型和面向对象模型等。 14.试说明关系模型的优缺点。

参考答案:优点:(1)具有系统的数学理论依据,是建立在严格的数学概念基础之上

的;(2)具有单一的数据结构;(3)具有更高的数据独立性和用户生产率。

缺点:关系数据模型最主要的缺点就是,由于存取路径对用户透明,查询效率难以保证,为了提高性能,系统必须对用户提出的查询进行优化,从而增加了研制和开发DBMS的难度。

第2章 关系数据库

1.解释如下术语:域、候选键、主键、外键、实体完整性规则和参照完整性规则。 参考答案:

域:域是一组具有相同数据类型的值的集合,又称作值域。

键与主键:若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选键或候选码(Candidate Key),简称键或码。若一个关系有多个候选键,则根据需要选定其中的一个为主键(Primary Key)。

外键:设F是基本关系R的一个或一组属性,但不是关系R的主键。如果F与基本关系S的主键KS相对应(它们的名称可以不同,但必须出自相同的域),则称F是基本关系R的外键(Foreign Key)。

实体完整性规则:基本关系的主属性不能取空值。

参照完整性规则:若属性(或属性组)F是基本关系R的外键,它与基本关系S的主键KS相对应(基本关系R和S不一定是不同关系),则对于R中的每个元组在F上的值必须为:或者取空值;或者等于S中某个元组的主码值。

2.简述关系的性质。

参考答案:(1)任意两个元组不能完全相同;(2)元组的顺序可以任意交换;(3)属性的顺序可以任意交换;(4)列是同质的(Homogeneous),即每一个属性的值必须是同一数据类型,来自同一个域;(5)不同的列可以出自同一个域,但属性名必须唯一;(6)每一分量必须是不可分的数据项。

3.关系操作能力的表达通常有哪两种方式?

参考答案:代数方式和逻辑方式,这两种方式分别称为关系代数和关系演算。 4.关系模型的三类完整性是什么?

参考答案:实体完整性、参照完整性和用户定义的完整性。 5.简述DBMS的完整性控制机制的主要功能。

参考答案:(1)完整性规则定义;(2)完整性检查;(3)违约处理。

6.在参照完整性检查中,当删除被参照关系的元组时,对参照关系的处理方式主要包括哪几种?

参考答案:限制删除、级联删除、置空值删除和置默认值删除。 7.关系代数的基本操作有哪些? 答:并、差、笛卡尔积、选择和投影。 8.设有如下关系(带下划线的为主键):

商品(商品编号,商品名称,单价,规格,生产商,产地); 商店(商店编号,商店名称,电话,所在城市); 销售(商店编号,商品编号,销售量)。

销售关系记录了每个商店销售某种商品的销售量,并且每个商店销售某种商品有唯一的销售量。请说明上述销售关系的主键和外键,对于每个外键,指出相应的参照关系和被参照关系。

参考答案:对于销售关系,(商店编号,商品编号)是主键;外键包括:商品编号(参照关系是销售,被参照关系是商品)和商店编号(参照关系是销售,被参照关系是商店)。

9.给定如图2-6所示的关系R1、R2和R3,完成以下问题: (1)分别给出R1∪R2、R1∩R2和R1-R2的运算结果。 (2)分别给出?A,B (R1)×?C,E (R3)、R1? R3 的运算结果。 (3)给出?A,E (?B>6(R1? R3))的结果。 参考答案: (1)

R1∪R2:

A 3 5 8 9 9

B 4 2 4 8 8

C 3 5 6 6 12

A

R1∩R2:

A 5 9

B 2 8

C 5 6

R1-R2:

A 3 9

B 4 8

C 3 12

(2) ?A,B (R1)×?C,E (R3):

A 3 3 3 5 5 5 9 9 9

B 4 4 4 2 2 2 8 8 8

C 5 6 6 5 6 6 5 6 6

E 2 6 8 2 6 8 2 6 8

R1? R3:

A

A 3 3 5 5

B 4 4 2 2

C 3 3 5 5

B 8 8 8 8

C 6 6 6 6

D 9 6 9 6

E 6 8 6 8

(3) ?A,E (?B>6(R1? R3)):

A 9 9

E 6 8

10.某数据库包括职工关系EMP、工程关系PRJ和报酬关系SAL,这三个关系模式为:

EMP(ENO,ENAME,SEX,BIRTH);--记录职工信息 PRJ(PNO,PNAME,BUDGET);--记录工程信息

SAL(ENO,PNO,SALARY)。--记录职工参加工程和参加每个工程的工资情况 各属性含义为:ENO(职工号)、ENAME(姓名)、SEX(性别)、BIRTH(出生年月)、PNO(工程编号)、PNAME(工程名称)、BUDGET(预算)、SALARY(工资)。用关系代数完成以下查询:

(1)查询所有女职工的职工号和姓名。

(2)查询参加工程编号为‘P1’的工程的职工姓名。 (3)查询没有参加过预算超过500000的工程的职工号。 (4)查询参加过所有预算超过500000的工程的职工姓名。

参考答案:

(1)?ENO, ENAME(?SEX=’女’(EMP)) (2)?ENAME(?PNO=’P1’(SAL)?EMP)

(3)?ENO(EMP)-?ENO(?BUDGET>500000(PRJ)?SAL)

(4)?ENAME(?ENO, PNO(SAL)÷?PNO(?BUDGET>500000(PRJ))?EMP)

第3章 SQL SERVER 2008概述

1.SQL Server 2008的体系结构包含哪些组成部分?各部分的作用是什么?

参考答案:SQL Server 2008系统由4个部分组成:数据库引擎、Analysis Services、Reporting Services和Integration Services。

数据库引擎:是SQL Server 2008系统的核心服务,负责完成数据的存储,处理和安全管理。例如创建数据库、创建表、创建视图、数据查询和访问数据库等操作,都是由数据库引擎完成。

Analysis Services(分析服务):主要作用是通过服务器和客户端技术的组合提供联机分析处理(Online Analytical Processing,OLAP)和数据挖掘功能。

Reporting Services(报表服务):包含用于创建和发布报表及报表模型的图形工具和向导,用于管理Reporting Services的报表服务器管理工具和用于对Reporting Services对象模型进行编程和扩展的应用程序接口(API)。

Integration Services(集成服务):是一个数据集成平台,负责完成有关数据的提取,转换和加载等操作。其所要解决的问题是如何将数据源中的数据经过适当的处理并加载到Analysis Services中以便进行各种分析处理。

2.SQL Server 2008有哪几种版本?

参考答案:企业版(Enterprise)、标准版(Standard)、工作组版(Workgroup)、网络版(Web)、开发版(Developer)以及速成版(Express)和精简版(Compact 3.5)两个免费的版本。

3.启动/停止SQL Server服务的方法是什么?请上机完成。

参考答案:有三种方式:(1)利用SQL Server Configuration Manager;(2)利用操作系统的服务管理工具;(3)利用SQL Server Management Studio(管理工作室)。具体实现方法请参见教材中相关内容。

4.SQL Server的身份验证模式有几种?分别是什么?

参考答案:SQL Server包含两种身份认证模式:“Windows身份认证模式”和“混合模式”。

5.SQL Server中的系统数据库有哪些?分别有什么作用?

参考答案:SQL Server 2008安装时自动创建了master、model、tempdb和msdb四个系统数据库。这些数据库是存放系统状态信息、配置信息的系统数据字典,是运行SQL Server的基础。

master数据库:记录SQL Server系统的所有系统级信息。包括元数据、系统配置设置等信息。如果 master 数据库出现问题,SQL Server无法启动。

model数据库:作用是作为在SQL Server实例上创建的所有数据库的模板。如果修改model数据库,之后创建的所有数据库都将继承这些修改。当发出“创建数据库”语句时,将通过复制 model 数据库中的内容来创建数据库的第一部分,然后用空页填充新数据库的剩余部分。

msdb数据库:由SQL Server代理使用,完成计划报警和作业调度功能,也可以由Service

Broker和数据库邮件等其他功能使用。

tempdb数据库:是一个全局资源,连接到SQL Server实例的所有用户都可以使用它,并可以保存:显式创建的临时用户对象;SQL Server数据库引擎创建的内部对象;由使用已提交读的、修改了数据库中数据的事务生成的行版本;由要修改数据的事务为实现联机索引操作、AFTER 触发器等功能而生成的行版本。每次启动SQL Server时都会重新创建 tempdb,从而在系统启动时总是保持一个干净的数据库副本。在断开联接时会自动删除临时表和存储过程,并且在系统关闭后没有活动连接。不能对tempdb进行备份和还原操作。

6.上机创建一个名为STUDENT的用户数据库,其数据文件初始大小为1MB,最大大小为100MB,日志文件初始大小为5MB,最大大小为50MB。

参考代码:

CREATE DATABASE STUDENT ON PRIMARY (

NAME = STUDENT_data,

FILENAME='C:\\Program Files\\Microsoft SQL Server\\MSSQL10.MSSQLSERVER\\MSSQL\\STUDENT.mdf', SIZE = 1, MAXSIZE = 100, ) LOG ON (

NAME = STUDENT_log,

FILENAME='C:\\Program Files\\Microsoft SQL

Server\\MSSQL10.MSSQLSERVER\\MSSQL\\STUDENT_log.ldf', SIZE = 5, MAXSIZE = 50, )

7.请上机完成以下任务:将第6题中生成的数据库文件拷贝到D:\\下,并给该数据库增加一个数据文件STUD1.ndf(初始大小为1MB,最大大小为20MB)。

参考答案:在SSMS中使用图形界面分离STUDENT数据库;将数据库文件拷贝到D:\\;附加数据库;在STUDENT数据库【属性】的【文件】页中,选择【添加】,来按要求增加数据库文件。此外还可以使用T-SQL的ALTER命令增加数据库文件。

ALTER DATABASE STUDENT ADD FILE (NAME = STUD1,

FILENAME=' D:\\STUD1.ndf', SIZE = 1MB, MAXSIZE = 20MB)

8.上机在第6题中创建的数据库STUDENT中创建下表(关系)并输入数据。 Stud(Stu_no, Stu_name, Stu_gender, Stu_age, Stu_dept)

各属性的数据类型分别为:Stu_no:char(10),Stu_name:char(6),Stu_gender:char(2),Stu_age:int,Stu_dept:varchar(50)。(注:只需要按照上述要求创建表,关于各数据类型的含义暂时不用考虑,这些将在后续章节详细介绍)

参考答案:在对象资源管理器中,选择希望在其中创建表的数据库STUDENT并展开,右击【表】,然后选择【新建数据表】。填写“列名”、选择对应的“数据类型”以及设置是否“允许Null值”,并点击工具栏内的“保存”按钮,在弹出的对话框中输入表名(Stud),点击【确定】保存表。

第4章 关系数据库标准语言SQL

1.试述SQL的特点。

参考答案:(1)综合统一;(2)高度非过程化;(3)面向集合的操作方式;(4)灵活的使用方式;(5)语言简洁,易学易用。

2.设有三个关系模式:STUDENT(SNO,SNAME,SAGE,SSEX,SCLASS)、COURSE (CNO,CNAME,CHOUR,CTEACHER)和SC (SNO,CNO,GRADE),分别表示学生、课程和选课情况,这里带下划线的属性(属性组)表示主键。各属性的含义为:SNO(学号),SNAME(学生姓名),SAGE(年龄),SSEX(性别),SCLASS(班级),CNO(课程号),CNAME(课程名称),CHOUR(学时),CTEACHER(任课教师),GRADE(成绩)。

规定:属性SNO,SNAME,SSEX,SCLASS,CNO,CNAME和CTEACHER的数据类型为字符(CHAR)型,自定义列的宽度;SAGE,CHOUR和GRADE的数据类型为整(INT)型;学生年龄限定在18到28岁之间,姓名不允许空,课程名称唯一。用SQL语句定义上述表的结构(包括必要的完整性约束)。

参考答案:

CREATE TABLE STUDENT(

SNO CHAR(10) PRIMARY KEY, SNAME CHAR(10) NOT NULL,

SAGE INT CHECK(SAGE BETWEEN 18 AND 28), SSEX CHAR(2), SCLASS CHAR(12)); CREATE TABLE COURSE(

CNO CHAR(5) PRIMARY KEY, CNAME CHAR(20) UNIQUE, CHOUR INT,

CTEACHER CHAR(10)); CREATE TABLE SC( SNO CHAR(10), CNO CHAR(5), GRADE INT,

PRIMARY KEY(SNO, CNO),

FOREIGN KEY(SNO) REFERENCES STUDENT(SNO), FOREIGN KEY(CNO) REFERENCES COURSE(CNO));

3.针对第2题的三个表,编写完成如下操作的SQL语句。

(1)查询任课教师“刘晓莉”所授课程的课程号、课程名称和学时。 (2)查询有不及格(成绩小于60)课程的学生姓名。

(3)查询年龄在18~20岁之间的男学生的学号、姓名、年龄和班级。

(4)查询“数据库原理”课程的最高分数。 (5)查询平均成绩80分以上的学生姓名。

(6)查询名称中包含“数据”的课程的详细信息。

(7)查询选修“数据库原理”课程成绩85分以上的学生的姓名和所在班级。 (8)查询没有选修“数据库原理”课程的学生姓名和所在班级。 (9)查询被所有“计算机091”班学生选修的课程的课程名称和学时。 (10)查询“计算机091”班“数据库原理”成绩最高的学生姓名。

(11)查询年龄超过其所在班级平均年龄的学生的姓名、性别、年龄和所在班级。 (12)向STUDENT表中插入一条新的学生记录(0905050105,周晓斌,19,男,计算机091)。

(13)所有“计算机091”班学生的“数据库原理”课程的成绩提高5%。 (14)删除“编译原理”课程的所有选课信息。

(15)向COURSE表中插入一条新的课程记录(050804,数字图像处理,48),暂不指定任课教师。

参考答按:

(1)SELECT CNO, CNAME, CHOUR

FROM COURSE

WHERE CTEACHER='刘晓莉';

(2)SELECT SNAME

FROM STUDENT

WHERE SNO IN (SELECT SNO FROM SC WHERE GRADE<60);

(3)SELECT SNO, SNAME, SAGE, SCLASS

FROM STUDENT

WHERE SSEX='男' AND SAGE BETWEEN 18 AND 20;

(4)SELECT MAX(GRADE) 最高分数

FROM SC

WHERE CNO IN (SELECT CNO FROM COURSE WHERE CNAME='数据库原理');

(5)SELECT SNAME FROM STUDENT

WHERE SNO IN (SELECT SNO FROM SC GROUP BY SNO

HAVING AVG(GRADE)>80);

(6)SELECT * FROM COURSE

WHERE CNAME LIKE '%数据%';

(7)SELECT SNAME, SCLASS

FROM STUDENT JOIN SC ON SC.SNO=STUDENT.SNO JOIN COURSE ON SC.CNO=COURSE.CNO WHERE CNAME='数据库原理' AND GRADE>85;

(8)SELECT SNAME, SCLASS FROM STUDENT

WHERE SNO NOT IN (SELECT SNO FROM SC

WHERE CNO IN (SELECT CNO FROM COURSE WHERE CNAME='数据库原理'));

(9)SELECT CNAME, CHOUR FROM COURSE

WHERE NOT EXISTS (SELECT * FROM STUDENT

WHERE SCLASS='计算机091' AND NOT EXISTS ( SELECT * FROM SC

WHERE SC.CNO=COURSE.CNO AND SC.SNO=STUDENT.SNO));

(10)SELECT SNAME FROM STUDENT

WHERE SCLASS='计算机091' AND SNO IN ( SELECT SNO FROM SC

WHERE CNO IN (SELECT CNO FROM COURSE WHERE CNAME='数据库原理') AND GRADE=(SELECT MAX(GRADE) FROM SC

WHERE CNO IN (SELECT CNO FROM COURSE WHERE CNAME='数据库原理') AND SNO IN (SELECT SNO FROM STUDENT WHERE SCLASS='计算机091')));

(11)SELECT SNAME, SSEX, SAGE, SCLASS

FROM STUDENT S1

WHERE SAGE>(SELECT AVG(SAGE) FROM STUDENT S2 WHERE S2.SCLASS=S1.SCLASS);

(12)INSERT INTO STUDENT

VALUES('0905050105', '周晓斌', 19, '男', '计算机091');

(13)UPDATE SC SET GRADE=GRADE*1.05

WHERE SNO IN (SELECT SNO FROM STUDENT

WHERE SCLASS='计算机091')

AND CNO IN (SELECT CNO FROM COURSE

WHERE CNAME='数据库原理');

(14)DELETE FROM SC

WHERE CNO IN (SELECT CNO FROM COURSE WHERE CNAME='编译原理');

(15)INSERT INTO COURSE(CNO, CNAME, CHOUR)

VALUES('050804', '数字图像处理', 48);

4.试说明视图的优点。

参考答案:(1)简化用户的操作;(2)使用户能够从不同角度看待同一数据;(3)提供一定程度的逻辑独立性;(4)有助于对数据提供安全保护。

5.根据第2题中的三个表,创建一个 “计算机091”班学生的选课视图V_Computer091,要求视图中包括学号、姓名、课程名称和成绩等属性。

参考答案:

CREATE VIEW V_Computer091(SNO, SNAME, CNAME, GRADE) AS

SELECT STUDENT.SNO, SNAME, CNAME, GRADE FROM STUDENT JOIN SC ON SC.SNO=STUDENT.SNO JOIN COURSE ON SC.CNO=COURSE.CNO WHERE SCLASS='计算机091';

6.利用第5题创建的视图,使用SQL完成如下查询。

(1)查询“计算机091”班选修“数据库原理”课程的学生姓名及该课程的成绩。 (2)查询“计算机091”班每个学生的学号、姓名和平均成绩。 (3)查询“计算机091”班选课超过3门的学生姓名。 参考答案:

(1)SELECT SNAME, GRADE FROM V_Computer091

WHERE CNAME='数据库原理';

(2)SELECT SNO, SNAME, AVG(GRADE) 平均成绩

FROM V_Computer091 GROUP BY SNO, SNAME;

(3)SELECT SNAME FROM V_Computer091

WHERE SNO IN (SELECT SNO FROM V_Computer091 GROUP BY SNO

HAVING COUNT(*)>3);

7.上机实践:在SQL Server 2008数据库引擎中创建一个包含第2题中三个表的数据库(要满足该题的所有要求),输入如图4-29所示的数据,在查询编辑器中,编写SQL语句完成第3题的所有操作,并查看运行结果。

答:本题的参考代码详见第3题答案。

第5章 T-SQL程序设计基础

1.T-SQL的常量有几种?变量有几种?分别如何表示? 参考答案:

常量包括:字符串常量,例如'China';二进制常量,例如0x12Ef;日期/时间常量,例如'2010-12-05 14:23:05';数值量常量,例如235,3.45,$12。

变量包括局部变量和全局变量,局部变量以@开头,例如@number;全局变量,以@@开头,例如@@rowcount。

2.编写程序,求5! 参考答案:

DECLARE @a INT,@b INT SET @a=1 SET @b=1 WHILE(@a<=5) BEGIN

SET @b=@a*@b SET @a=@a+1 END PRINT @b

3.编写一个函数,功能是:输入两个整数,输出其中较小的一个。 参考答案:

CREATE FUNCTION comparedTwo(@a INT, @b INT) RETURNS INT AS BEGIN

DECLARE @small INT IF(@a<@b) SET @small=@a ELSE

SET @small=@b RETURN @small END GO

DECLARE @smallone INT, @aa INT, @bb INT SET @aa=3 SET @bb=5

SET @smallone=[student].dbo.comparedTwo(@aa,@bb) PRINT @smallone

4.编写一个函数,功能是:输入一个字符串,将该字符串倒序输出,例如,输入字符串'happy',则输出字符串'yppah'。

参考答案:

CREATE FUNCTION reversion(@str VARCHAR(200)) RETURNS VARCHAR(200) AS BEGIN

DECLARE @ret varchar(200) DECLARE @i int SET @ret='' SET @i=LEN(@str) WHILE (@i>0) BEGIN

SET @ret=@ret+SUBSTRING(@str,@i,1) SET @i=@i-1 END

RETURN @ret END GO

SELECT dbo.reversion('OMG')

5.编写一个函数elimin(c1, c2),将字符串c1中所有出现在c2的字符删除并输出c1,例如,如果有elimin('student', 'ent'),则应输出字符串'sud'。

参考答案:

CREATE FUNCTION elimin(@c1 VARCHAR(200),@c2 VARCHAR(200)) RETURNS VARCHAR(200) AS BEGIN

DECLARE @i INT SET @i=1

WHILE(@i

SET @c1=REPLACE(@c1,SUBSTRING(@c2,@i,1),'') SET @i=@i+1 END

RETURN @c1 END GO

SELECT dbo.elimin('student', 'ent')

6.编写一个函数,功能是将指定的时间显示为XX年XX月XX日。 参考答案:

CREATE FUNCTION formatdate(@date DATETIME)

RETURNS VARCHAR(20) BEGIN

RETURN CAST(DATEPART(YY,@date) AS VARCHAR(4))+'年' +CAST(DATEPART(MM,@date) AS VARCHAR(4))+'月' +CAST(DATEPART(DD,@date) AS VARCHAR(4))+'日' END GO

SELECT dbo.formatdate(GETDATE())

7.编写一个函数,功能是查询学生及所借书籍的详细信息。 参考答案:

USE TSG GO

CREATE FUNCTION Selectdetails () RETURNS TABLE AS RETURN

SELECT Patron.Name,Patron.Gender,Patron.BirthDate,Patron.Type, Patron.Department,Book.*,Lend.LendTime,Lend.ReturnTime FROM Book, Lend,Patron

WHERE Book.CallNo=Lend.CallNo GO

SELECT * FROM Selectdetails()

第6章 存储过程、触发器及游标

1.简述什么是存储过程,存储过程有哪些优点?

参考答案:存储过程是一组为了完成特定功能的SQL语句的集合、它经编译后存储在数据库中,用户通过指定的调用方法执行之。存储过程具有名称,参数及返回值,并且可以嵌套调用,其优点如下:

(1)快速执行。存储过程已在服务器注册,在创建时就进行了分析和优化,当存储过程第一次执行后,就驻留在内存中,省去了重新分析优化工作,比T-SQL批代码执行快得多。

(2)安全性好。存储过程具有安全特性(例如权限)和所有权链接,用户可以被授予权限来执行存储过程而不必直接对存储过程中引用的对象具有权限,从而增强系统的安全性。另外,参数化存储过程有助于保护应用程序不受 SQL注入攻击。

(3)访问统一。存储过程允许模块化程序设计,存储过程一旦创建,以后即可在程序中调用任意多次。这可以改进应用程序的可维护性,并允许应用程序统一访问数据库,可以在C/S及B/S模式中进行统一调用。

(4)存储过程是命名代码,允许延迟绑定。

(5)减少网络通信流量。如一个需要数百行T-SQL代码的操作可以通过一条执行过程代码的语句来执行,而不需要在网络中发送数百行代码,降低网络通信开销。

2.SQL Server中如何执行存储过程?

参考答案:使用T-SQL的 EXECUTE 语句执行存储过程。如果存储过程是批处理中的第一条语句,可以省略EXECUTE 关键字。

3.SQL Server存储过程的输入、输出参数如何表示?如何使用?

参考答案:存储过程输入参数在创建时声明,使用CREATE PROCEDURE 存储过程名 后面跟随存储过程参数名称、类型及默认值,参数的个数可以0个或多个。如果是输出参数,还要用OUTPUT关键字声明。参数的传递可以用名字传递,也可以按位置传递。

4.简述存储过程与函数的区别。

参考答案:存储过程和函数都属于可编程的数据库对象,它们都是具有一定功能的SQL 语句的集合,且都可以带参数,但二者还是有很大区别,主要体现在:

(1)存储过程是预编译的,执行效率比函数高。

(2)存储过程可以不返回任何值,也可以返回多个输出变量,但函数有且必须有一个返回值。

(3)存储过程必须单独执行,而函数可以嵌入到表达式中,使用更灵活。 (4)存储过程主要是对逻辑处理的应用或解决,函数主要是一种功能应用。 5.什么是触发器?触发器分几类,DML触发器有什么优点?

参考答案:触发器实际上是一种特殊的存储过程,分为DML,DDL及登录触发器三类,在某种事件发生时触发,可以类似事件处理的功能。DML触发器的主要作用就是能够实现由主键和外键所不能实现的复杂的参照完整性和数据的一致性,也就是说,主要用于表间的完整性约束,除此之外,还可以用于解决高级形式的业务规则,复杂行为限制以及

实现定制记录,数据同步等。其优点有:(1)强化了约束的功能。(2)可以跟踪数据变化。(3)支持级联运行。(4)可以调用存储过程。

6.简述SQL Server的DML触发器分为哪几类,如何使用?

参考答案:(1)INSERT触发器:在将数据插入到表或视图时执行的特殊存储过程,当数据表的INSERT触发器执行时,新插入的数据行,将同时插入到该数据表和Inserted表。Inserted表是保存了已经插入的数据行复本的虚拟表,该表允许用户引用该表的数据,通过表对比插入数据的变化。

(2)DELETE触发器:是将数据从数据表或视图删除时,执行的特殊存储过程。当数据表的DELETE触发器执行时,从数据表被删除的数据首先被放在一个特殊的名字为Deleted的表中,该表是保存了已经被删除的数据的虚拟表,允许用户引用该表的数据,Deleted表和触发器表通常没有相同的行。

(3)UPDATE触发器:是在数据表或视图中修改数据时,执行的触发器,UPDATE触发器的处理过程与前两者不同,UPDATE触发器处理分为两个步骤,当该触发器执行时,原始数据被移到Deleted表,修改后的数据被插入到Inserted表,触发器将检查这两个表同时更数据表。

按照触发执行的方式,触发器分为AFTER触发器和INSTEAD OF触发器两种,其中AFTER触发器是在INSERT、UPDATE、DELETE命令执行完之后执行,只能在表上定义,而INSTEAD OF 触发器是当INSERT、UPDATE、DELETE语句执行时替代原有操作,其执行早于约束处理,晚于创建Inserted和Deleted表,可以在表上和视图上定义。

7.什么叫游标,游标有哪些优点?

游标是一种处理数据的方法,它可以对结果集进行逐行处理,也可以指向结果集的任意位置然后对该位置的结果集处理。游标的优点如下:

(1)在结果及对特定行进行定位。 (2)从结果集的当前位置检索数据行。

(3)支持对结果集中当前位置进行数据修改操作。

(4)为由其他用户对显示在结果集中的数据库数据所做的更改提供不同级别的可见性支持。

(5)支持在脚本、存储过程以及触发器中访问结果集中的数据。 8.简述使用游标处理数据的一般步骤。

参考答案:使用游标处理数据的典型过程包括声明、打开游标、通过FETCH逐行读取数据并进行处理,使用完之后,用CLOSE语句关闭游标,再通过DEALLOCATE语句释放游标的存储空间。

9.创建一存储过程,该存储过程创建一个包含100个随机数的临时表,这个临时表只有一个字段,类型为数值型,然后查询该临时表的数据,作为一个CURSOR返回给调用者。

参考代码如下:

CREATE PROCEDURE usp_GenRandom @tmpCursor CURSOR VARYING OUTPUT AS BEGIN

SET NOCOUNT ON

CREATE TABLE #tmpTable ( num FLOAT) DECLARE @i INT DECLARE @num FLOAT SELECT @i = 0 WHILE @i <100 BEGIN

SELECT @i = @i + 1 SELECT @num = RAND()

INSERT INTO #tmpTable( num) VALUES (@num) -- PRINT @I END

SET @tmpCursor = CURSOR SCROLL FOR SELECT * FROM #tmpTable OPEN @tmpCursor END

调用代码如下:

DECLARE @MyCursor CURSOR

EXEC usp_GenRandom @MyCursor OUTPUT FETCH NEXT FROM @MyCursor WHILE (@@FETCH_STATUS = 0) BEGIN

FETCH NEXT FROM @MyCursor END

CLOSE @MyCursor

DEALLOCATE @MyCursor

10.根据教材提供的TSG数据库,编写借书逻辑的存储过程,输入参数为读者证号以及图书的索书号,返回值定义如下:

返回值 0 1 2 3 其他

参考代码如下:

CREATE PROCEDURE usp_CheckOut @PatronID VARCHAR(20) = NULL, @CallNo VARCHAR(20) = NULL AS

含义 借书成功 读者证号不存在 索书号不存在 可借册数为0 借书失败

BEGIN

SET NOCOUNT ON;

IF (@PatronID IS NULL

OR (SELECT COUNT (*) FROM Patron WHERE PatronID=@PatronID)=0) RETURN(1) IF (@CallNo IS NULL

OR (SELECT COUNT (*) FROM Book WHERE CallNo=@CallNo)=0) RETURN(2) IF (SELECT AvailableNumber FROM Book WHERE CallNo=@CallNo)=0 RETURN(3)INSERT INTO Lend (CallNo,PatronID,LendTime ) VALUES (@CallNo ,@PatronID ,GETDATE()) IF @@ERROR <> 0

RETURN(4)

ELSE

RETURN(0)

END

调用代码如下

DECLARE @ret int

EXEC @ret=usp_CheckOut 'T0101','C52/J181B:7' SELECT @ret

11.在TSG数据库中,对Patron表编写删除触发器,如果该读者有外借图书,则不允许执行删除操作。

参考代码如下:

CREATE TRIGGER [dbo].[tri_Patron_D] ON [dbo].[Patron] AFTER DELETE AS BEGIN

SET NOCOUNT ON; IF Exists(

select * from Lend where PatronID in ( select PatronID from Deleted ) and ReturnTime is Null) BEGIN

PRINT '该读者有图书未还,不能删除!' ROLLBACK TRANSACTION END ELSE

DELETE FROM Patron where PatronID in (select PatronID from Deleted) END

12.编写程序,定义一个游标cur_Patron,通过读取cur_Patron数据行计算Patron表中男女读者的数量。

参考代码如下:

致性的副本,因为在备份开始到结束期间,数据库中无任何事务运行,数据的一致性也就不会受到任何影响。但由于备份是个耗时的工作,备份期间不允许事务运行将会影响数据库的使用,降低数据库的可用性。动态备份期间允许对数据库进行操作,它可以克服静态备份的缺点,但由于备份期间允许对数据库进行修改,所以得到的副本不能保证数据的一致性。

9.日志文件有什么作用?记录日志的原则是什么?

参考答案:日志是一个与数据库文件分开的文件。它存储对数据库进行的所有更改,并全部记录插入、更新、删除、提交、回退等数据库变化。

日志文件可以用来进行事务故障恢复和系统故障恢复,并结合备份进行介质故障恢复。具体作用包括:

(1)事务故障和系统故障的恢复必须要利用日志文件,利用日志文件对发生故障的事务进行撤销(UNDO)处理;对故障发生时未完成的事务进行撤销(UNDO)处理,而对已经提交的事务要进行重做(REDO)处理。

(2)在动态备份中,必须建立日志文件,备份和日志文件综合起来才能够有效地恢复数据库。

(3)在静态备份中,也可以建立日志文件。重装备份后能够将数据库恢复到备份时刻的正确状态,然后利用日志文件,把已完成的事务进行重做(REDO)处理,对故障发生时尚未完成的事务进行撤销(UNDO)处理。

日志的记录要遵循两条原则:

(1)必须严格的按照并发事务的执行次序记录。 (2)必须先记录日志,后写数据库。

10.SQL Server中有哪几种恢复模式?哪几种备份类型?

参考答案:三个恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式。 简单恢复模式不备份事务日志,简单恢复模式可最大程度地减少事务日志的管理开销。如果数据库损坏,则简单恢复模式将面临极大的工作丢失风险。完全恢复模式是默认的恢复模式。在该模式下,需要对事务日志进行手工管理。该模式的优点是可以恢复到数据库失败或者指定的时间点上。缺点是,如果不进行管理,事务日志将会快速增长,消耗磁盘空间。大容量日志恢复模式类似于完整恢复模式,但其不同的是,一些将产生大量日志记录的操作的记录会被精简。

SQL Server中的备份主要分为以下四种类型:

(1)完整备份:指对数据库进行完整的备份,包括所有的数据以及数据库对象。 (2)事务日志备份:指对数据库中发生的事务进行备份,包括从上次正确备份之后,到目前为止所有已经完成的事务,但必须配合完整备份才能进行数据库恢复。

(3)差异备份:指将最近一次完整备份以来所做的数据库修改进行备份。

(4)文件(组)备份:只备份数据库中的个别文件(组),要求在数据库设计时就要考虑到,将某些表分到文件(组),备份时单独进行备份。

11.编写两个事务并使它们并发执行。在第一个事务中,先从读者表Patron中查询“学生”读者的信息,等待30秒后再次查询“学生”读者的信息;另一个事务将PatronID为S0120080201的读者的类型由“学生”修改为“教师”。要求:保证第一个事务中的两次查

询结果一致。

参考代码如下:

USE TSG GO

BEGIN TRAN T1

SELECT * FROM Patron WITH(HOLDLOCK) WHERE Type='学生'

WAITFOR DELAY '00:00:30'

SELECT * FROM Patron WITH(HOLDLOCK) WHERE Type='学生' COMMIT TRAN

USE TSG GO

BEGIN TRAN T2 UPDATE Patron SET Type ='教师'

WHERE PatronID ='S0120080201' COMMIT TRAN

第9章 关系数据库规范化理论

1.解释下列概念和术语:函数依赖、完全函数依赖、部分函数依赖、传递函数依赖、候选键、主键、外键、主属性、非主属性、1NF、2NF、3NF和BCNF。

参考答案:函数依赖:设关系模式R(U),是属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数决定Y,或Y函数依赖于X,记作X→Y。

完全函数依赖和部分函数依赖:在关系模式R(U)中,如果X→Y,并且对于X的任何一个真子集X?,都有X??Y,则称Y完全函数依赖于X,记作:X???Y。若X→Y,Y不完全函数依赖于X,则称Y部分函数依赖于X,记作:X???Y。

传递函数依赖:在关系模式R(U)中,如果X→Y,Y→Z,且Y?X,Y?X,则称Z传递函

T数依赖于X,记作:X???Y。

F候选键:设K为R 中的属性或属性组合,若K???U(即K完全函数决定R的

FP全部属性U),则K为R的候选键(Candidate Key),简称键。

主键:若候选键多于一个,则选定其中的一个为主键(Primary Key)。

外键:关系模式R中属性或属性组X并非R的键,但X是另一个关系模式的键,则称X是R的外键(Foreign key),也称外码。

主属性和非主属性:包含在任何一个候选键中的属性,叫做主属性(Prime Attribute);不包含在任何候选键中的属性称为非主属性(Nonprime Attribute)或非键属性(Non-key Attribute)。

1NF:如果关系模式R,其所有的属性均为简单属性,即每个属性都是不可再分的,则称R属于第一范式,简称1NF,记作R?1NF。

2NF:如果关系模式R?1NF,且R中的每一个非主属性都完全函数依赖于R的键,则R?2NF。

3NF:如果关系模式R?2NF,且R中的每一个非主属性都不传递函数依赖于R的键,则R?3NF。

BCNF:如果关系模式R?1NF,并且R中的任何一个非平凡的函数依赖X→Y(即Y?X),X必含有码,则R?BCNF。

2.现有一个关系模式:借阅(书号,书名,库存数,读者号,借期,还期),假如同一本书允许一个读者多次借阅,但不能同时对一种书借多本。请给出该关系模式的键。

参考答案:键为(书号,读者号,借期)。

3.设有一个反映工程及其所使用相关材料信息的关系模式:R(工程号,工程名,工程地址,开工日期,完工日期,材料号,材料名称,使用数量)。如果规定:每个工程和每种材料分别由工程号和材料号唯一标识;每个工程的地址、开工日期、完工日期唯一;不同工程的地址、开工和完工日期可能相同;工程名与材料名称均有重名;每个工程使用若干种材料,每种材料可应用于若干工程中,每个工程使用某种材料有一个使用数量。

(1)根据上述规定,写出模式R的基本函数依赖(FD)和候选键。 (2)判定R最高达到第几范式,并说明理由。

(3)将R规范到3NF。 参考答案:

(1)FD:工程号→工程名,工程号→工程地址,工程号→开工日期,工程号→完工日期,材料号→材料名称,(工程号,材料号)→使用数量;候选键:(工程号,材料号)。

(2)1NF,存在非主属性工程名、工程地址、开工日期、完工日期和材料名称部分函数依赖于键(工程号,材料号)。

(3)R1(工程号,工程名,工程地址,开工日期,完工日期); R2(材料号,材料名称);

R3(工程号,材料号,使用数量)。

4.给定一个选课关系模式SC (学号,姓名,年龄,班级,辅导员,课程名称,成绩,学分)。如果规定:学号唯一地标识一名学生,每名学生的姓名和年龄唯一,允许学生重名;一个班级包括若干学生,每个学生只属于一个班级;每个班级只有一个辅导员,一个辅导员可以负责多个班级;课程没有重名,每门课程对应一个学分,但不同的课程可能有相同的学分;每名学生可以选修多门课程,每门课程也可以供多名学生选修;一个学生选修一门课程有一个成绩。

(1)根据上述规定,写出关系模式SC满足的基本函数依赖(FD)和候选键。 (2)判定SC最高达到第几范式,并说明理由。

(3)如果SC不满足3NF,将其分解为满足3NF的模式集。 参考答案:

(1)FD:学号→姓名,学号→年龄,学号→班级,班级→辅导员,课程名称→学分,(学号,课程名称)→成绩;候选键:(学号,课程名称)。

(2)1NF,存在非主属性姓名、年龄、班级、辅导员和学分部分函数依赖于键(学号,课程名称)。

(3)S(学号,姓名,年龄,班级); CS(班级,辅导员);

CE(课程名称,学分)

SC(学号,课程名称,成绩)。

5.假设某旅馆业务规定,每个账单对应一个顾客,账单由发票号唯一标识,账单中包含一个顾客姓名、到达日期和顾客每日的消费明细,账单的格式如表9-2所示。

表9-2 旅馆账单格式

发票号 2344566 2344566 2344566 2344566

到达日期 2009-12-10 2009-12-10 2009-12-10 2009-12-10

顾客姓名 顾大局 顾大局 顾大局 顾大局

消费日期 2009-12-10 2009-12-10 2009-12-10 2009-12-11

项目 房租 餐费 电话费 餐费

金额 240.00 42.00 4.80 98.00

如果根据上述业务规则,设计一个关系模式:Bill(发票号,到达日期,顾客姓名,消费日期,项目,金额)。回答下列问题:

(1)结合账单格式给出关系模式Bill满足的基本函数依赖,并找出该模式的候选键。

(2)判断关系模式Bill满足的最高范式级别,并说明理由。 (3)如果关系模式Bill不满足BCNF,请将其规范化到高一级范式。 参考答案:

(1)FD:发票号→到达日期,发票号→顾客姓名,(发票号,消费日期,项目)→金额;候选键:(发票号,消费日期,项目)。

(2)1NF,存在非主属性到达日期、顾客姓名部分函数依赖于候选键(发票号,消费日期,项目)。

(3)B1(发票号,到达日期,顾客姓名);

B2(发票号,消费日期,项目,金额)。

6.设关系模式R(A, B, C, D)对应的一个关系r如表9-3所示。请给出r满足的基本函数依赖;如果r满足的函数依赖覆盖了所对应的关系模式R满足的全部函数依赖,请说明关系模式R最高满足哪一级范式。

参考答案:FD:D→A,AB→CD,BC→AD,BD→C,CD→B;

A a1 a1 a2 a1

表9-3 关系r的数据

B b1 b2 b1 b3

C c1 c2 c2 c1

D d2 d4 d1 d4

该模式不存在非主属性,而且D→A,D不含有码,因此R最高满足3NF。

7.给定一个关系模式PES(工程号,工程名,员工号,员工姓名,薪级,工资)。其中,工程号和员工号分别作为工程和员工的标识。表8-4所示是模式PES对应的一个关系实例。

(1)如果表9-4所示关系满足的函数依赖即为其对应关系模式PES所满足的函数依赖,那么请给出关系模式PES满足的基本函数依赖。

(2)试分析关系模式PES是否存在数据冗余问题,说明理由。

(3)分析关系模式PES是否存在插入和删除异常问题,并说明什么情况下可能发生。 (4)将PES分解为满足3NF的模式集。

表9-4 关系模式EPS的一个实例

工程号 201001 201001 201001 201002 201002

工程名 TPMS TPMS TEMPS TCT TCT

员工号 2004001 2002002 2001005 2004003 2004001

员工姓名 赵约翰 钱比利 孙凯文 孙凯文 赵约翰

薪级 A B C B A

工资 2000 3000 4000 3000 2000

参考答案:

(1)工程号→工程名,员工号→员工姓名,薪级→工资,(工程号,员工号)→薪级。 (2)存在数据冗余。一个工程有多少员工参加工程名就重复存储多少次;每个员工每参加一项工程,其姓名就重复存储一次;员工每参加参加一项工程,工资也会重复存储。

(3)存在插入异常,当工程没有开工时,没有员工参加工程,此时由于无法提供员工号,工程的名称等信息无法建立;同样如果一名员工没有参加任何工程,员工的信息也无法建立;当员工没有参加工程或工程没有开工时薪级工资信息也无法建立。存在删除异常,某个员工只参加一项工程,而由于某种原因需要退出该工程,当删除该员工参加此工程的记录时,连同员工的其它信息也会被删除;同样,如果某个工程只有一名员工参加,当删

除员工参加该工程的记录时,连同该工程的信息也一同被删掉;当删除所有员工参加工程的记录时,薪级工资信息将会被删除,而工资与薪级的关系是不依赖于是否有员工参加工程的。

(4)P(工程号,工程名);

E(员工号,员工姓名); W(薪级,工资);

PEW(工程号,员工号,薪级)。

第10章 数据库设计

1.简述数据库的设计内容。

参考答案:数据库设计一般包括数据库的结构设计和行为设计两方面内容,数据库结构设计是指系统整体逻辑模式与子模式的设计,是对数据的分析设计;数据库的行为设计是指施加在数据库上的动态操作的设计,是对应用系统功能的设计。在设计的过程中,应该把对数据库的结构设计和行为设计两方面紧密结合起来,将这两方面的需求分析,抽象、设计及实现在各个阶段同时进行,相互参照,互相补充,不断完善。

2.简述数据库设计过程各阶段的任务。

参考答案:数据库设计一般分为需求分析,概念结构设计、逻辑结构设计、物理设计及数据库的实施、数据库运行与维护6个阶段。在需求分析阶段主要由系统分析人员与业务专家、用户合作,收集资料,并对资料进行分析整理,画出数据流图,建立数据字典,并把设计的内容反馈给用户进行确认,直到最后形成认可的需求分析文档。概念结构设计是整个数据库设计的关键,它通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型,目前常用E-R图来描述。逻辑结构设计是将概念结构转换为某个DBMS支持的数据模型,并对其进行优化。数据库物理设计是为逻辑数据模型选取一个最适合应用环境的物理结构然后对物理结构的时间及空间效率进行评价。在数据库实施阶段,设计人员运用DBMS提供的数据语言及其宿主语言,根据逻辑设计和物理设计的结果建立数据库,编制与调试应用程序,组织数据进入数据库,并进行试运行。数据库应用系统经过试运行后,经测试无误之后即可投入正式运行。在数据库系统运行过程中必须不断地对其进行评价、维护与调优。

3.简述数据流图的画法。

参考答案:一般情况下,应该遵守“由外向里”的原则。即先确定系统的边界或范围,再考虑系统的内部,先画加工的输入和输出,再画加工内部。具体实行时可按下述步骤进行:

(1)识别系统的输入和输出,画出顶层图。

(2)画系统内部的数据流、加工与文件,画出一级细化图。 (3)加工的进一步分解,画出二级细化图。

(4)从左至右画数据流图。通常左侧、右侧分别是数据源和终点,中间是一系列加工和文件。正式的数据流图应尽量避免线条交叉,必要时可用重复的数据源、终点和文件符号。此外,数据流图中各种符号布置要合理,分布应均匀。

4.数据字典的内容和作用是什么?

参考答案:数据字典通常包括数据项、数据结构、数据流、数据存储、处理过程5个部分,数据项是最小单位,若干个数据项可组成一个数据结构,数据字典通过数据项和数据结构的定义来描述数据流及数据存储的逻辑内容。数据字典是进行详细的数据收集与数据分析所获得的主要成果,使得用户和开发人员对于输入、输出、存储成分和中间计算有共同的理解,在数据库设计中占有很重要的地位。

5.简述概念结构的设计步骤。

参考答案:首先对需求分析阶段收集到的数据进行分类和聚集,形成实体、实体的属性、标识实体的键。然后按组织机构或者提供的服务进行归纳划分,设计分E-R图、确定实体之间的联系类型(1:1、1:n、m:n)。最后集成局部视图,进行合并重构,处理冲突,优化得到全局概念结构。

6.简述将E-R图转换为关系模型的一般规则。

参考答案:把E-R模型向关系模型转换实际上就是将实体、属性及实体间的联系转化为关系模式,这种转换一般遵循如下原则:

(1)一个实体集转换为一个关系模式,就是将实体的属性对应关系模式的属性,实体的键就是关系的键。

(2)一个1:1联系一般不单独转换为关系模式,而是与所联系的两个实体任一实体对应关系模式合并,即在这一关系模式中加入另一实体对应的关系模式的键和联系本身的属性的可以转换为一个独立的关系模式。

(3)一个1:n联系一般也不单独转换为关系模式,而是与n端实体对应的关系模式合并,即在n端对应关系模式增加1端实体对应关系模式的键和联系本身的属性。

(4)一个m:n联系需要单独转换为一个关系模式。其属性有联系两端实体的键和联系本身的属性组成,该关系模式的键由联系两端实体的键组合而成。

(5)对于三个或三个以上实体间的一个多元联系可以转换为一个关系模式。与该多元联系相连的各实体的键以及联系本身的属性均转换为关系的属性,把各实体键的组合变成该关系模式的键。如果多个关系模式具有相同键,则这些关系模式可合并。

(6)自联系增加一个键值对的关系。 7.简述物理结构设计的主要内容。

参考答案:物理结构的设计目标主要有两个,一是提高数据库的性能,二是有效利用存储空间,围绕这上述目标,主要内容有:

(1)确定数据的存储结构。 (2)设计数据的存取路径。 (3)确定数据的存放位置。 (4)确定系统配置。

8.数据库日常维护工作是什么?

参考答案:数据库日常的维护工作主要是由DBA完成的,它包括: (1)数据库的备份和恢复。

(2)数据库的安全性、完整性控制。 (3)数据库性能的监督、分析和改造。 (4)数据库的重组织与重构造。

9.一个简单的科研项目管理数据库设计如下数据: 科研人员:工号、姓名、性别、专业、技术职务。

科研项目:项目编号、项目名称、经费、立项时间、结题时间。 主持人:主持人编号、领域、主持项目数。

一个科研人员可以参加多个科研项目、每个科研项目可以由多个科研人员参加、一个主持人可以主持多个项目、每个项目只有一个主持人。

(1)设计该科研项目管理系统的E-R图。 (2)转换成关系模型(标明主、外键)。

(3)基于SQL Server 2008 设计成相应的表,写出建表的SQL语句。

(4)创建一个视图,用于显示某主持人主持项目的信息,字段包括主持人编号、姓名、项目编号、项目名称、经费、参加项目的科研人员人数。

参考答案:(1)E-R图如下:

科科科科科科科科科科科科科科科科科科科科科科科科科科科科科科科科1科科1科科科科科科1科科科科n科科科科科科科科m科科科科科科科科科科科科n科科科科科科科科科科科科科科科科科科科科科科科科科科科科科科科科科科科科科科科科科科科科科科科科科科科科科科科科科科科科

(2)转换为关系模型

主持人(主持人编号,工号,领域,主持项目数),主持人编号是主键,工号外键。 科研项目(项目编号,项目名称,经费,立项时间,结题时间,主持人编号),项目编号是主键,主持人编号是外键。

科研人员(工号,姓名,性别,专业,技术职务),工号是主键。

参加科研(项目编号,工号,参加时间),(项目编号,工号)是主键,项目编号和工号分别是外键。

(3)参考语句如下:

CREATE TABLE 科研人员(

工号 CHAR(10) PRIMARY KEY, 姓名 CHAR(10) NOT NULL,

性别 CHAR(2) CHECK (性别 IN (’男’,’女’)) 专业 VARCHAR(30), 技术职务 CHAR(10)); CREATE TABLE 主持人(

主持人编号 CHAR(5) PRIMARY KEY,

工号 CHAR(10) REFERENCES 科研人员(工号), 领域 VARCHAR(20), 主持项目数 INT); CREATE TABLE 科研项目(

项目编号 CHAR(8) PRIMARY KEY, 项目名称 VARCHAR(50) NOT NULL,

经费 MONEY, 立项时间 DATE, 结题时间 DATE,

主持人编号 CHAR(5) REFERENCES 主持人(主持人编号)); CREATE TABLE 参加科研( 项目编号 CHAR(8), 工号 CHAR(10), 参加时间 DATE,

PRIMARY KEY(项目编号, 工号),

FOREIGN KEY(项目编号) REFERENCES 科研项目(项目编号), FOREIGN KEY(工号) REFERENCES 科研人员(工号));

(4)参考语句如下:

CREATE VIEW v_主持项目信息 AS

SELECT 科研项目.主持人编号,姓名,科研项目表.项目编号,项目名称,经费, (SELECT COUNT(*) AS Expr1 FROM 参加科研

WHERE 项目编号 =科研项目表.项目编号) AS 科研人员数

FROM 科研项目 JOIN 主持人 ON 科研项目.主持人编号=主持人.主持人编号

JOIN 科研人员 ON 主持人.工号=科研人员.工号

第11章 数据库编程

1.在嵌入式SQL中是如何区分SQL语句和主语言语句的?

参考答案:在嵌入式SQL中,为了能够区分SQL语句与主语言语句,所以SQL语句都必须加前缀EXEC SQL。

2.在嵌入式SQL中是如何解决数据库工作单元与源程序工作单元之间通讯的? 参考答案:数据库工作单元与源程序工作单元之间的通信主要包括:

(1)向主语言传递SQL语句的执行状态信息,使主语言能够据此信息控制程序流程,主要用SQL通信区(SQL Communication Area ,简称SQLCA)实现。

(2)主语言向SQL语句提供参数,主要用主变量实现。

(3)将SQL语句查询数据库的结果交主语言进一步处理,主要用主变量和游标(Cursor)实现。

3.在嵌入式SQL中,如何协调SQL语言的集合处理方式和主语言的单记录处理方式? 参考答案:游标是用于协调SQL语言的集合处理方式和主语言的单记录处理方式。 SQL语言与主语言具有不同的数据处理方式。SQL语言是面向集合的,一条SQL语句原则上可以产生或处理多条记录。

主语言是面向记录的,一组主变量一次只能存放一条记录。所以仅使用主变量并不能完全满足SQL语句向应用程序输出数据的要求,为此嵌入式SQL引入了游标的概念,用游标来协调这两种不同的处理方式。

4.静态SQL与动态SQL有何区别?

参考答案:静态SQL语言,就是在编译时已经确定了引用的表和列。宿主变量不改变表和列信息。可以使用主变量改变查询参数值,但是不能用主变量代替表名或列名。

动态SQL语言是不在编译时确定SQL的表和列,而是让程序在运行时提供,并将SQL语句文本传给DBMS执行。静态SQL语句在编译时已经生成执行计划。而动态SQL语句,只有在执行时才产生执行计划。动态SQL语句首先执行PREPARE语句要求DBMS分析、确认和优化语句,并为其生成执行计划。DBMS还设置SQLCODE以表明语句中发现的错误。当程序执行完“PREPARE”语句后,就可以用EXECUTE语句执行计划,并设置SQLCODE,以表明完成状态。

静态SQL语句的另一个优点是它的性能。简单地说,对于要求运行时间较短地SQL程序,静态SQL语句比动态处理要快,因为准备一个语句的可执行形式的工作负载在预编译的时候就完成的。

5.编程语言与数据库的接口都有哪些?

参考答案:为了方便应用程序访问DBMS,同时提高应用程序的可维护性,提供了多种数据库编程接口,最通用的是ODBC和JDBC。可以根据自己不同的平台和需要,做出合适的选择。在Windows平台的数据库接口中,常见的数据库访问接口有ODBC,OLE DB,ADO/ADO.NET,JDBC等。

6.ODBC的体系结构组成包括哪些内容?

参考答案:一个完整的ODBC从体系结构分由下列几个部件组成:

(1) ODBC应用程序(Application)。 (2) ODBC API函数。

(3) ODBC管理器(Administrator)。

(4) ODBC驱动程序管理器(Driver Manager)。 (5) ODBC 驱动程序。 (6) 数据源。

7.简要说明一下什么是ADO.NET??

参考答案:ADO.NET(ActiveX Data Object for .NET,针对.NET的ActiveX数据对象)是一组向.NET程序员公开数据访问服务的类。可以使用以下ADO.NET 的两个组件来访问和处理数据。

(1) .NET Framework 数据提供程序。 (2) DataSet。

8.JDBC驱动程序类型有哪几种?

参考答案:目前比较常见的JDBC驱动程序类型有以下四种: (1) JDBC-ODBC桥驱动。 (2) 本地API驱动。 (3) 网络协议驱动。 (4) 本地协议驱动。

9.上机验证11.2.5小节例子。

参考代码见教材323~324页(11.2.5小节)的代码。

第12章 数据库开发实例

1.简述数据库应用系统的开发步骤?

参考答案:实践中,数据库应用系统的开发过程一般分为以下6个阶段:

(1)计划。在计划阶段,主要完成以下任务:了解用户的要求及现实环境,从技术、经济和法律及社会因素等三个方面研究并论证本软件项目的可行性,编写可行性研究报告,探讨解决问题的方案,并对可供使用的资源(如计算机硬件、系统软件、人力等)成本,可取得的效益和开发进度作出估计。制订完成开发任务的实施计划。

(2)分析。软件需求分析就是回答做什么的问题。本阶段的基本任务是和用户一起确定要解决的问题,建立软件的逻辑模型,编写需求规格说明书文档并最终得到用户的认可。需求分析的主要方法有结构化分析方法、数据流程图和数据字典等方法。

(3)设计。本阶段的工作是根据需求说明书的要求,设计建立相应的软件系统的体系结构,并将整个系统分解成若干个子系统或模块,定义子系统或模块间的接口关系,对各子系统进行具体设计定义,最后形成软件概要设计和详细设计说明书,数据库或数据结构设计说明书,组装测试计划。

(4)编码。软件编码是指把软件设计转换成计算机可以接受的程序,即写成以某一程序设计语言表示的“源程序清单”。

(5)测试。软件测试的目的是以较小的代价发现尽可能多的错误。要实现这个目标的关键在于设计一套出色的测试用例(测试数据和预期的输出结果组成了测试用例)。

(6) 运行及维护。 软件编写好之后,要从开发环境到实际运行环境的转移,一般都是以安装包形式提供,在用户使用现场进行软件交付。维护是旨在已完成对软件的研制(分析、设计、编码和测试)工作并交付使用以后,对软件产品所进行的一些软件工程的活动。即根据软件运行的情况,对软件进行适当修改,以适应新的要求,以及纠正运行中发现的错误。编写软件问题报告、软件维护报告。

在实际开发过程中,软件开发并不是从第一步进行到最后一步,而是在任何阶段,在进入下一阶段前一般都有一步或几步的回溯。在测试过程中的问题可能要求修改设计,用户可能会提出一些需要来修改需求说明书等。

2.思考为本章系统的关系模式设计与第10章的图书馆管理模型的关系模式相比各有什么优缺点?

参考答案:本章设计系统更贴近实际业务,满足流通系统在大规模数据量下系统快速响应的需要:

(1)增加了续借、预约、操作员等关系模式。

(2)读者信息与读者证信息合并,可以使操作更方便。

(3)把文献信息及复本信息分开,体现了图书馆实际流通业务中以单册为最小单位,避免了同种书的不同复本无法标识问题,缺点是加大了信息的输入量。

(4)引入了操作员,操作时间等属性,使得操作有据可查。 (5)借阅政策实体的引入,使借阅政策控制更灵活。 3.ADO.NET数据对象模型中的常见对象的用途及使用方法?

参考答案:ADO的对象模型中有5个主要的数据库访问和操作对象,分别是Connection(连接)、Command(控制)、DataReader、DataAdapter(数据修改)和DataSet对象。其中,Connection对象主要负责连接数据库,Command对象主要负责生成并执行SQL语句,DataReader对象主要负责读取数据库中的数据,DataAdapter对象主要负责在Command对象执行完SQL语句后生成并填充DataSet和DataTable,而DataSet对象主要负责存取和更新数据。具体使用方法参考本章相关内容。

4.完成图书馆检索系统的设计及实现。 (略)

本文来源:https://www.bwwdw.com/article/gc68.html

Top