1、第 1 页 数据 库原理 及 应用习 题参考 答案 习题 1 1-1 文件系统阶段的数据管理有哪些特点 ? 答: 文件系统阶段主要有 5 个特点:数据以 “ 文件 ” 形式长期保存;数据的逻辑结构与 物理结构有了区别;文件组织已多样化;数据面向应用;对数据的操作以记录为单位。 1-2 文件系统阶段的数据管理有些什么缺陷 ? 试举例说明。 答:主要有 3个缺陷:数据冗余;数据不一致性;数据联系弱。 例如学校里教务处、财务处、保健处建立的文件中都有学生详细资料,如联系电话,家庭 住址等。这就是“数据”冗余;如果某个学生搬家,就要 修改 3个部门文件中的数据,否则会 引起同一数据在 3个部门中不一致
2、;产生上述问题的原因是这 3个部门的文件中数据没有 联系。 1-3 数据库阶段的数据管理有哪些特色 ? 答:主要有 5个特点:采用数据模型可以表示复杂的数据结构;有较高的数据独立性; 为用户提供了方便的用户接口;提供了 4个方面的数据控 制功能;对数据的操作以数据项为 单位,增加了系统的灵活性。 1-4 什么是数据独立性 ?在数据库中有哪两级独立性 ? 答:数据独立性是指应用程序与 DB 的数据结构之间的相互独立。在物理结构改变时,尽量不影响应用程序 ,称为物理独立性;在逻辑结构改变时,尽量不影响应用程序,称之为逻辑数据独立性。 1-5 试解释 DB、 DBMS 和 DBS 三个概念。 答:
3、DB 是长期存储在计算机内、有组织的、统一管理的相关数据的集合。 DBMS 是位 于用户与 0S 之间的一层数据管理软件,它为用户或应用程序提供访问 DB的方法。 DBS是实现有组织地、动态地存储大量关联数据、方便多用户访问的计算机硬件、软件 和数据资源组成的系统,即采用数据库技术的计算机系统。 1-6 SQL Server 2005 有哪些数据类 型? 答: SQL Server 中数据类型分为整型、浮点型、二进制数据型、逻辑型、字符型、文本型、图形型、日期时间型、货币型、自定义类型 、可变数据类型 和表 数据类 型。 1-7 列举 SQL Server 2005 中 新增 的 主要功能 。
4、 答: SQL Server 2005 中 新增 的 主要功能有: Notification Services 增强功能 ; Reporting Services 增强功能 ,其中包括: 报表功能的增强功能 、 Reporting Services 设计时增强功能 、Reporting Services 可编程性的增强功能 、 Reporting Services 可管理性和部署的增强功能 ; 新增的 Service Broker 以 实现 SQL Server 中的消息传递方面具有以下优势 : 高伸缩性 、 消息协调、排序和锁定 、 集成数据库数据 、 集成数据库安全性 ; 数据库引擎增强功
5、能 ; 数据访问接口方面的增强功能 ; SQL Server Analysis Services( SSAS) 的增强功能 ; Integration Services 的增强功能 ; 在可管理性、可用性、可编程性、移动性、可伸 缩性和性能方面提供了改进。 工具和实用工具增强功能 ; 1-8 SQL Server 2005 的实用程序和常用 工具 有哪些? 答: SQL Server 2005 给出的常用应用程序和实用工具有:企业管理器、查询分析器、商业智能开发平台、 SQL Server 分析器、 SQL Server 2005 数据库引擎优化程序 、 SQL Server 配置管理器 等。
6、 习题 2 2-1 名词解释 第 2 页 逻辑数据 物理数据 联系的元数 1:1联系 1:N 联系 M:N 联系 数据模型 概念数据模型 外模式 概念模式 内模式 外模式 /模式映象 模式 /内模式映象 数据独立性 物理数据独立性 逻辑数据独立性 答: 逻辑数据:指程序员或用户用以操作的数据形式。 物理数据:指存储设备上存储的数据。 联系的元数:与一个联系有关的实体集个数,称为联系的元数。 1:1 联系:如果实体集 El 中每个实体至多和实体集 E2 中的一个实体有联习 ,反之亦然,那么 El 和E2的联系称为 “l :1 联系 ” 。 1:N联系:如果实体集 El 中每个实体可以与实体集 E
7、2 中任意个 ( 零个或 多个 )实体有联系,而 E2中每个实体至多和 El 中一个实体有联系,那么 El和 E2的联系 是“ 1:N 联系”。 M:N联系:如果实体集 El 中每个实体可以与实体集 E2中任意个 ( 零个或 多个 )实体有联系,反之亦然,那么 El和 E2的联系称为 “M :N联系 ” 。 数据模型:能表示实体类型及实体间联系的模型称为 “ 数据模型 ” 。 概念数据模型:独立于计算机系统、完全不涉及信息在计算机中的表示、反 映企业组织所关心的信息结构的数据模型。 外模式: 是用户用到的那部分数据的描述。 概念模式:数据库中全部数据的整体逻辑结构的描述。 内模式: DB在物理
8、存储方面的描述。 外模式 /模式映象:用于定义外模式和概念模式之间数据结构的对应性 。 模式 /内模式映象:用于定义概念模式和内模式之间数据结构的对应性。 数据独立性 :应用程序和 DB的数据结构之间相互独立,不受影响。 物理数据独立性:在 DB的物理结构改变时,尽量不影响应用程序。 逻辑数据独立性:在 DB的逻辑结构改变时,尽量不影响应用程序。 2-2 逻辑记录与物理记录、逻辑文件与物理文件有哪些联系和区别 ? 答:逻辑数 据是用户用以操作的数据形式,是抽象的概念化数据。物理数据是 实际存放在存储设备上的数据。 逻辑数据与物理数据在结构上可以差别很大,需通过两级映象来进行数据传输 和格式转换
9、。 从以上的解释可以看出,逻辑记录和逻辑文件是用 户在程序中使用的记录和文件,而物理记录和物理文件是指磁盘上的记录和文件。逻辑记录、文件与物理记录、文件在结构、组成上可以有很大的差异,而数据库管理软件就是通过三级结构两级映象来实现逻辑数据与物理数据之间的转换。 2-3 试述 ER模型、层次模型、网状模型、关系模型和面向对象模型的主要特点。 答: ER模型直接表示实体类型及实体间联系,与计算机系统无关,充分反映用 户的需求,用户容易理解。 层次模型的数据结构为树结构,记录之间联系通过指针实现,查询较快,但 DML 属于过程化的语言,操作复杂。 网状模型的数据结构为有向图,记录之间联系通过指针实现
10、,查询较快,并且容易实现 M: N 联系,但 DML 属于过程化的语言,编程较复杂。 关系模型的数据结构为二维表格,容易为初学者理解。记录之间联系通过关键码实现。 DML 属于非过程化语言,编程较简单。 面向对象模型能完整描述现实世界的数据结构,具有丰富的表达能力,能表达嵌套、递 归的数据结构。但涉及的知识面较广,用户较难理解,这种模型尚未普及。 2-4 数据之间的联系在各种结构数据模型中是怎么实现的 ? 第 3 页 答:在层次、网状模型中 ,数据之间的联系通过指针实现的;在关系模型中,数据之间联系通过外键和主键间联系实现的;在面向对象模型中,数据之间嵌套、递归联系通过对象标识符 (OID)实
11、现的。 2-5 DB 的 三级模式结构描述了什么问题 ? 试详细解释。 答: DB的三级模式结构是对数据的三个抽象级别,分别从外部 (用户 )级、概念级和内 部级去观察数据库。 外部级是用户使用的局部数据库的逻辑结构,其 描述称为外模式。 概念级是 DB的整体逻辑结构,其描述称为概念模式。 内部级是 DB的物理结构,其描 述称为内模式。 2-6 试述概念模式在数据库结构中的重要地位。 答:数据按外模式的描述提供给用户,按内模式的描述存储在磁盘中,而概念模式提供 了连接这蘧级的相对稳定的中间观点,并使得两级的任何一级的改变都不受另一级的牵制。 2-7 什么是数据独立性 ? 其目的是什么 ? 数据
12、库独立性是指应用程序与 DB 的数据结构之间相互独立。其目的是在物理结构改变或逻辑结构改变时,尽量不影响应用程序。 习题 3 3-1 名词解释: 关系模式 关系实例 属性 元组 超键 候选键 主键 外键 实体完整性规则 参照完整性规则 答: 关系模 式:是 对关系的描述,包括模式名、诸属性名、值域名和模式的主键。 关系实例:关系模式具体的值,称为关系实例。 属 性 : 即字段或数据项,与二维表中的列对应。属性个数,称为元数。 元组:即记录,与二维表中的行对应。元组个数,称为基数。 超键:能惟一标识元组的属性或属性集,称为关系的超键。 候选键:不含有多余属性的超键,称为候选 键。 主键:正在使用
13、的、用于标识元组的候选键,称为主键。 外键:属性集 F是模式 S 的主键,在模式 R中也出现,那么称 F 是模式 R的外键。 实体完整性规则:实体的主键值不允许是空值。 参照完整性规则:依赖关系中的外键值或者为空值,或者是相应参照关系中某个主键值。 3-2 为什么关系中的元组没有先后顺序,且不允许有重复元组? 答:由于关系定义为元组的集合,而集合中的元素是没有顺序的,因此关系中的元组也 譬没有先后的顺序 (对用户而言 )。这样既能减少逻辑排序,又便于在关系数据库中引进集 合论的理论。 每个关系模式都有一个主键 ,在关系中主键值是不允许重复的。 如果关系中有重复元组,那么其主键值肯定相等,起不了
14、惟一标识作用,因此关系中不允许有重复元组。 3-3 外健值何时允许为空?何时不允许为空? 答:在依赖表中,当外键是主键的组成部分时,外键值不允许为空;否则外键值允许为 空。 3-4 笛卡尔积、等值连接和自然连接三者之间有什么区别? 答:笛卡儿积是一个基本操作,而等值连接和自然连接是组合操作。 设关系 R 的元数为 r,元组个数为 m;关系 S 的元数为 s。,元组个数为 n。 那么, RS 的元数为 r+s,元组个数为 mn; R S的元数也是 r+s,但元组个数小于等于 mn ; R S的元数小于等于 r+s,元组个数也小于等于 m n: 3-5 设有关系 R 和 S,如图 3.18 所示。
15、 A B C 3 2 7 4 6 5 2 4 7 7 3 3 A B C 3 7 4 2 5 3 R S 图 3.18 关系 R 和 S i j 第 4 页 计算 R S, R-S, RS, RS, 3,2(S), B23 SEX=M(SC) CNAME,TEACHER(S#=S3 (SC C) SNAME(SEX=F TEACHER=LIU(S SC C) C#(C)-C#(SNAME=WANG(S SC) 1(1=4 25(SC SC) C#,CNAME(C (S#,C#(SC) S#(S) S#,C#(SC) C#(TEACHER=LIU(C) 3-8 在 3.7 题 的三个关系中,用户
16、有一查询语句:检索数学系的学生选修计算机系开设 的课程的课程名和任课教师姓名。 试写出该查询的关系代数表达式。 试写出该查询优化的关系代数表达式。 画出该查询初始的关系代数表达式的语法树。 使用 3.5.3 节的优化算法,对语法树进行优化,并画出优化后的语法树。 解: CNAME,TEACHER(DEPT=数学系 (S SC C) 设 L1=S#(DEPT=数学系 (S), L2=S#,C#(SC),则优化的关系代数表达式为: CNAME,TEACHER(SC.C#=C.C#(SC.C#(S.S#=SC.S#(L1 L2) C) 查询初始的关系代数表达式可表达为: CNAME,TEACHER(
17、DEPT=数学系 (L(S.S#=SC.S# SC.C#=C.C#(S SC) C) 此处 L 为 S、 SC、 C 中 的全部属性(公共属性只取一次)。 优化后的语法树为 C L S.S#=SC.S# SC.C#=C.C# DEPT=数学系 CNAME,TEACHER S SC C DEPT=数学系 CNAME,TEACHER S SC SC.C#=C.C# SC.C# S.S#=SC.S# S# S#,C# 第 6 页 3-9 为什么要对关系代数表达式进行优化? 答:关系代数表达式由关系代数操作组合而成。操作中,以笛卡尔积和连接操作最费时间,并生成大量的中间结果。如果直接按表达式书写的顺序
18、执行,必将花费很多时间,并生成大量的中间结果,效率较低。在执行前,由 DBMS 的查询子系统先对关系代数表达式进行优化,尽可能先执行选择和投影操作,以便减少中间结果,节省时间。 优化工作是由 DBMS 做的,用户书写时不必关 心优化一事,仍以简练的形式书写。 习题 4 4-1 名词解释 基本表 视图 实表 相关子查询 联接查询 嵌套查询 交互式 SQL 嵌入式 SQL 游标 答: 基本表:实际存储在数据库中的表,称为基本表。 视图:是从基本表或其他视图中导出的表,它本身不独立存储在数据库中,也就是数据库中只存放视图的定义而不存放视图的数据。 实表:是对基本表的别称。 相关子查询: SELECT
19、 语句嵌套时,子查询中查询条件依赖于外层查询中的 值,因此子查询要反复求值供外层查询使用。这种子查询称为相关子查询。 连接查询:查询时要从多个基本表中提取数据,此时把多个基本表写在同一层的 FROM 子句中,这种查询形式称为连接查询。 嵌套查询:查询时要从多个基本表中提取数据,此时把多个基本表分别放在不同层 次上的 FROM 子句中,这种查询形式称为嵌套查询。 交互式 SQL:在终端交互方式使用的 SQL 语言。 嵌入式 SQL:嵌入在高级语言的程序中使用的 SQL 语言。 游标:游标是与某一查询相联系的符号名。游标有游标关系和游标指针两层含义。 在游标打开时,游标 (指针 )指向查 询结果的
20、第一个记录之前。 4-2 对于教务管理数据库的三个基本表 S(SNO,SNAME, SEX, AGE,SDEPT) SC(SNO,CNO,GRADE) C(CNO,CNAME,CDEPT,TNAME) 试用 SQL 的查询语句表达下列查询: 检索 LIU 老师所授课程的课程号和课程名。 检索年龄大于 23 岁的男学生的学号和姓名。 检索学号为 200915146 的学生所学课程的课程名和任课教师名。 检索至少选修 LIU 老师所授课程 中一门课程的女学生姓名。 检索 WANG 同学不学的课程的课程号。 检索至少选修两门课程的学生学号。 检索全部学生都选修的课程的课程号与课程名。 第 7 页 检
21、索选修课程包含 LIU 老师所授课程的学生学号。 解: SELECT C#,CNAME FROM C WHERE TEACHER=LIU; SELECT S#,SNAME FROM S WHERE AGE23 AND SEX=M; SELECT CNAME, TEACHER FROM SC,C WHERE SC.C#=C.C# AND S#=200915146 SELECT SNAME (连接查询方式 ) FROM S,SC,C WHERE S.S#=SC.S# AND SC.C#=C.C# AND SEX=F AND TEACHER=LIU; 或: SELECT SNAME (嵌套查询方式
22、) FROM S WHERE SEX=FAND S# IN (SELECT S# FROM SC WHERE C# IN (SELECT C# FROM C WHERE TEACHER=LIU) 或: SELECT SNAME (存在量词方式 ) FROM S WHERE SEX=F AND EXISTS(SELECT* FROM SC WHERE SC.S#=S.S# AND EXISTS(SELECT * FROM C WHERE C.C#=SC.C# AND TEACHER=LIU) SELECT C# FROM C WHERE NOT EXISTS (SELECT * FROM S,S
23、C WHERE S.S#=SC.S# AND SC.C#=C.C# AND SNAME=WANG); SELECT DISTINCT X.S# FROM SC AS X, SC AS Y WHERE X.S#=Y.S# AND X.C#!=Y.C#; SELECT C#.CNAME FROM C WHERE NOT EXISTS (SELECT * 第 8 页 FROM S WHERE NOT EXISTS (SELECT * FROM SC WHERE S#=S.S# AND C#=C.C#); SELECT DISTINCT S# FROM SC AS X WHERE NOT EXISTI
24、S (SELECT * FROM C WHERE TEACHER=LIU AND NOT EXISTS (SELECT * FROM SC AS Y WHERE Y.S#=X.S# AND Y.C#=C.C#); 4-3 试用 SQL 查询语句表达下列对 4.2 题中 教务管理数据库 的 三个基本表 S、 SC、 C 查询: 统计有学生选修的课程门数。 求选修 4 号 课程的学生的平均年龄。 求 LIU 老师所授课程的每门课程的学生平均成绩。 统计每门课程的学生选修人数 ( 超过 10 人的课程才统计 ) 。要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。 检索
25、学号比 WANG 同学大,而年龄比他小的学生姓名。 检索姓名以 WANG 打头的所有学生的姓名和年龄。 在 SC 中检索成绩为空值的学生学号和课程号。 求年龄大于女同学平均年龄的男学生姓名和年龄。 求年龄大于所有女同学年龄的男学生姓名和年龄。 解: SELECT COUNT(DISTINCT C#) FROM SC; SELECT AVG(AGE) FROM S,SC WHERE S.S#=SC.S# AND C#=4AND SEX=F; SELECT C.C#,AVG(GRADE) FROM SC,C WHERE SC.C#=C.C# AND TEACHER=LIU; SELECT C#,C
26、OUNT(S#) FROM SC GROUP BY C# HAVING COUNT(*)10 ORDER BY 2 DESC, 1; SELECT SNAME FROM S WHERE S#ALL(SELECT S# FROM S WHERE SNAME=WANG 第 9 页 AND AGE(SELECT AVG(AGE) FROM S WHERE SEX=F); SELECT SNAME,AGE FROM S WHERE SEX=MAND AGEALL(SELECT AGE FROM S WHERE SEX=F); 4-4 试用 SQL 更新语句表达对 4.2 给出的教务管理 数据库中三个基
27、本表 S、 SC、 C 进行如下 更新操作: 往基本表 S 中插入一个学生元组 (200912143, 张晶 , 21)。 在基本表 S 中检索每一门课程成绩都大于等于 80 分的学生学号、姓名和性别,并把检索到的值送往另一个已存在的基本表 STUDENT(SNO,SNAME,SEX)。 在基本表 SC 中删除尚无成绩的选课元组。 把 张成民 同学 在 SC 中的 选课 记录 全部删去。 把选修 高等数学 课 程中 不及格的成绩全 部 改为空值。 把低于总平均成绩的女同学成绩提高 5%。 在基本表 SC 中修改 4 号 课程的成绩,若成绩小于等于 75分时提高 5%,若成绩大于 75 分时提高
28、4%( 用两个 UPDATE 语句实现 ) 。 解: INSERT INTO S(S#,SNAME,AGE) VALUES(200912143,张晶 ,21); INSERT INTO STUDENT(SNO,SNAME,SEX) SELECT S#,SNAME,SEX FROM S WHERE S# IN (SELECT S# FROM SC WHERE 8075; UPDATE SC SET GRADE=GRADE*1.05 WHERE C#=4AND GRADE=75; 注意: 这两个 UPDATE 语句的顺序不能颠倒。 4-5 假设某 “ 仓库管理 ” 关系模 型有下列五个关系模式:
29、零件 PART(PNO,PNAME,COLOR,WEIGHT) 项目 PROJECT(JNO,JNAME,JDATE) 供应商 SUPPLIER(SNO,SNAME,SADDR) 供应 P_P(JNO,PNO,TOTAL) 采购 P_S(PNO,SNO,QUANTITY) 试用 SQL DDL 语句定义上述五个基本表,并说明主键和外键。 试将 PROJECT、 P_P、 PART 三个基本表的自然联接定义为一个视图 VIEW1, PART、 P_S、SUPPLIER 三个基本表的自然联接定义为一个视图 VIEW2。 试在上述两个视图的基础上进行数据查询: 检索上海的供应商所供应的零件的编号和名
30、字。 检索项目 J4 所用零件的供应商编号和名字。 解: CREATE TABLE PART (PNO CHAR(6),PNAME CHAR(10) NOT NULL,COLOR CHAR(6),WEIGHT FLOAT(6),PRIMARY KEY(PNO); CREATE TABLE PROJECT (JNO CHAR(6),JNAME CHAR(12)NOT NULL,DATE DATE,PRIMARY KEY(JNO); CREATE TABLE SUPPLIER (SNO CHAR(8),SNAME CHAR(12)NOT NULL,SADDR VARCHAR(30),PRIMARY KEY(SNO); CREATE TABLE P_P