<数据库原理与应用> (SQL Server 2012)---基于计算思维 教材习题答案

<数据库原理与应用> (SQL Server 2012)—基于计算思维
主编 刘征海 上海交通大学出版社

习题答案

习题1
1、解释下列名词:
答: 数据:数据是描述事物的符号记录。描述事物的符号可以是数字,也可以是文字、图形、图像、声音、语言等,数据有多种表现形式,它们都可以经过数字化后保存在计算机中。
数据库:数据库,顾名思义,就是存放数据的仓库,只是这个仓库是存储在计算机存储设备上的,而且是按一定的格式存储的。
数据库系统:数据库系统是指在计算机中引入数据库后的系统,一般由数据库、数据库管理系统(及相关的实用工具)、应用程序、数据库管理员组成。为保证数据库中的数据能够正常、高效地运行,除了数据库管理系统软件之外,还需要一个(或一些)专门人员来对数据库进行维护,这个专门人员就称为数据库管理员(Database Administrator,DBA)。
数据库管理系统:数据库管理系统与操作系统一样都是计算机的基础软件,同时也是一个非常复杂的大型系统软件,其主要功能包括如下几个方面:(1)数据库的建立与维护功能(2)数据定义功能(3)数据组织、存储和管理功能(4)数据操作功能(5)事务的管理和运行功能(6)其他功能
2、简述数据管理技术主要经历的几个阶段。
答:数据管理技术的发展因此也就经历了人工管理、文件管理和数据库管理三个阶段。
3、数据库系统由哪几部分组成,每部分在数据库系统中的作用大致是什么?
答:数据库系统是指在计算机中引入数据库后的系统,一般由数据库、数据库管理系统(及相关的实用工具)、应用程序、数据库管理员组成。为保证数据库中的数据能够正常、高效地运行,除了数据库管理系统软件之外,还需要一个(或一些)专门人员来对数据库进行维护,这个专门人员就称为数据库管理员(Database Administrator,DBA)。
4、文件管理方式在管理数据方面有哪些不足?
答:(1)编写应用程序不方便
(2)数据冗余不可避免
(3)应用程序依赖性
(4)不支持对文件的并发访问
(5)数据间联系弱
(6)难以满足不同用户对数据的需求

5、数据库管理方式在管理数据方面有哪些优点?
答:(1)相互关联的数据集合
(2)较少的数据冗余
(3)程序与数据相互独立
(4)保证数据的安全和可靠
(5)最大限度地保证数据的正确性
(6)数据可以共享并能保证数据的一致性

习题2
1、解释下列名词
答:信息:描述事物的符号记录称为数据,将从数据中获得的有意义的内容称为信息。
数据:数据是描述事物的符号记录。描述事物的符号可以是数字,也可以是文字、图形、图像、声音、语言等,数据有多种表现形式,它们都可以经过数字化后保存在计算机中
数据模型:数据模型(data model)也是一种模型,它是对现实世界数据特征的抽象。
2、简述由现实世界到机器世界建模的过程。
答:在数据库领域中,数据模型用于表达现实世界中的对象,即将现实世界中杂乱的信息用一种规范的、易于处理的方式表达出来。而且这种数据模型即要面向现实世界(表达现实世界信息),同时又要面向机器世界(因为要在机器上实现出来),因此一般要求数据模型满足三个方面的要求:
第一,能够真实地模拟现实世界。
因为数据模型是抽象现实世界对象信息,经过整理、加工,成为一种规范的模型。但构建模型的目的是为了真实、形象地表达现实世界情况。
第二,容易被人们理解。
因为构建数据模型一般是数据库设计人员做的事情,而数据库设计人员往往并不是所构建的业务领域的专家,因此,数据库设计人员所构建的模型是否正确,是否与现实情况相符,需要由精通业务的用户来评判,而精通业务的人员往往又不是计算机领域的专家。因此要求所构建的数据模型要形象化,要容易被业务人员理解,以便于他们对模型进行评判。
第三,能够方便地在计算机上实现。
因为对现实世界业务进行设计的最终目的是能够在计算机上实现出来,用计算机来表达和处理现实世界的业务。因此所构建的模型必须能够方便地在计算机上实现,否则就没有任何意义。

3、数据模型分为哪两个层次?
答:概念层数据模型和组织层数据模型。
4、简述常用的概念层数据模型。
答:常用的概念层数据模型有实体-联系(Entity-Relationship,E-R)模型、语义对象模型。本书只介绍实体-联系模型,这也是最常使用的一种概念模型。

5、什么是组织层数据库模型,有哪些常用的组织层数据库模型?
答:织层数据模型是从数据的组织形式的角度来描述信息,目前,在数据库技术的发展过程中用到的组织层数据模型主要有:层次模型(Hierarchical Model)、网状模型(Network Model)、关系模型(Relational Model)、面向对象模型(Object Oriented Model)和对象关系模型(Object Relational Model)。
6、简述数据库的三级模式体系结构。它能带来哪些优点?
答:数据库的三级模式结构是指数据库的外模式、模式和内模式。
 内模式:是最接近物理存储的,也就是数据的物理存储方式,包括数据存储位置、数据存储方式等。
 外模式:是最接近用户的,也就是用户所看到的数据视图。
 模式:是介于内模式和外模式之间的中间层,是数据的逻辑组织方式。
数据库管理系统在三个模式之间提供了以下两级映像:外模式/模式映像;模式/内模式映像。
正是这两级映像功能保证了数据库中的数据能够具有较高的逻辑独立性和物理独立性,使数据库应用程序不随数据库数据的逻辑或存储结构的变动而变动。

习题3
1、解释以下名词
答:主键:当一个关系中有多个候选键时,可以从中选择一个作为主键。每个关系只能有一个主键。
主键(Primary key)也称为主码或主关键字,是表中的属性或属性组,用于唯一地确定一个元组。
候选键:如果一个属性或属性集的值能够唯一标识一个关系的元组而又不包含多余的属性,则称该属性或属性集为候选键。
关系:通俗的讲,关系就是二维表,二维表的名字就是关系的名字。
关系模式:二维表的结构称为关系模式,或者说,关系模式就是二维表的表框架或表头结构。
2、数据模型的三要素是什么?
答:关系模型由关系模型的数据结构、关系模型的操作集合和关系模型的完整性约束三部分组成,这三部分也称为关系模型的三要素。
3、关系数据库的三个完整性是什么?各是什么含义?
答:数据完整性由一组完整性规则定义,而关系模型的完整性规则是对关系的某种约束条件。在关系数据模型中一般将数据完整性分为三类,即实体完整性、参照完整性和用户定义的完整性。
4、利用表3-8至表3-10给出的三个关系,实现如下查询的关系代数表达式。
(1)查询“信息管理系”学生的选课情况,列出学号、姓名、课程号和成绩。
答:∏Sno,Sname,Cno Grade(σSdept=‘信息管理系’(SC Student))

(2)查询“VB”课程的考试情况,列出学生姓名、所在系和考试成绩。
答:∏Sname,Sdept,Grade(σCname=‘VB’(SC Student Course))

(3)查询考试成绩高于90分的学生的姓名、课程名和成绩。
答:∏Sname,Cname,Grade(σGrade>90(SC Student Course))

(4)查询至少选修了0821103学生所选的全部课程的学生姓名和所在系。
答:∏Sname,Sdept(Student (∏Sno,Cno(SC)÷ ∏Cno(σSno=’ 0821103’(SC))))

(5)查询至少选了“C001”和“C002”两门课程的学生姓名、所在系和所选的课程号。

答:∏Sname,Sdept,Sno(∏Sno(σCno=’C001’(SC)) Student SC)∩
∏Sname,Sdept,Sno(∏Sno(σCno=’C001’(SC)) Student SC)
习题4
1、T-SQL语言支持的主要数据类型有哪些?
答:常见的有:整型,单精度,双精度,可变长度字符,固定长度字符,长型,日期等等。

2、T-SQL语言主要分为哪几大功能?
答: SQL语言按其功能可分为4大部分:数据定义、数据查询、数据操纵和数据控制。

3、设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。
答: CREATE TABLE Student
(
Sno CHAR(3) Primary Key,
Sname CHAR(8) NOT NULL,
Ssex CHAR(2) NOT NULL,
Sbirthday smalldatetime NULL,
Class CHAR(20) NULL
);
CREATE TABLE Course
(
Cno CHAR(5) Primary Key,
Cname VARCHAR(10) NOT NULL,
Tno CHAR(3) NOT NULL,
FOREIGN KEY(Tno) REFERENCES Teacher(Tno)
);
CREATE TABLE Score
(
Sno CHAR(3) NOT NULL,
Cno CHAR(5) NOT NULL,
Degree DECIMAL(4,1) NULL,
PRIMARY KEY( Sno, Cno),
FOREIGN KEY(Sno) REFERENCES Student(Sno),
FOREIGN KEY(Cno) REFERENCES Course(Cno)
);
CREATE TABLE Teacher
(
Tno CHAR(3) Primary Key,
Tname CHAR(4) NOT NULL,
Tsex CHAR(2) NOT NULL,
Tbirthday smalldatetime NULL,
Prof CHAR(6) NULL,
Depart VARCHAR(10) NULL
);

4、设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。四个表的结构如题3所述。用SQL语句完成以下题目:
(1)查询Student表中的所有记录的Sname、Ssex和Class列。
Select sname, ssex, class from student

(2)查询教师所有的单位即不重复的Depart列。
Select distinct depart from teacher

(3)查询Student表的所有记录。
Select * from student

(4)查询Score表中成绩在60到80之间的所有记录。
Select * from score where degree between 60 and 80

(5)查询Score表中成绩为85,86或88的记录。
Select * from score where degree in (85,86,88)

(6)查询Student表中“95031”班或性别为“女”的同学记录。
Select * from student where class=’95031’ or ssex=’女’

(7)以Class降序查询Student表的所有记录。
Select * from student order by class desc

(8)以Cno升序、Degree降序查询Score表的所有记录。
Select * from score order by cno, degree desc

(9)查询“95031”班的学生人数。
Select count(*) from student where class=’95031’

(10)查询Score表中的最高分的学生学号和课程号。(子查询或者排序)
Select sno, cno from score where degree=( select max(degree) from score )

(11)查询每门课的平均成绩。
Select cno, avg(degree) from score group by cno

(12)查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。
Select cno, avg(degree), count() from score where cno like ‘3%’ group by cno having(count()>=5)

(13)查询分数大于70,小于90的Sno列。
Select sno from score where degree>70 and degree<90

(14)查询所有学生的Sname、Cno和Degree列。
Select sname, cno, degree from student left outer join score on student.sno=score.sno

(15)查询所有学生的Sno、Cname和Degree列。
Select student.sno, cname, degree from student left join score on student.sno=score.sno
left join course on score.cno=course.cno

(16)查询所有学生的Sname、Cname和Degree列。
Select sname, cname, degree from student left join score on student.sno=score.sno left join course on score.cno=course.cno

(17)查询“95033”班学生的平均分。
Select class, avg(degree) from student join score on student.sno=score.sno group by class
(18)现查询所有同学的Sno、Cno、degree[注:此处是应该修改的,原来是grade现在应改为degree]和rank列。(其中rank为成绩的等级,成绩转换成为等级的规则是:大于等于90分为A、小于90且大于等于80分为B、小于80且大于等于70分为C、小于70且大于等于60分为D、小于60分为E)
Select sname, cno, degree, CASE
WHEN Grade >= 90 THEN 'A
WHEN Grade between 80 and 89 THEN ‘B’
WHEN Grade between 70 and 79 THEN ‘C’
WHEN Grade between 60 and 69 THEN ‘D’
WHEN Grade <60 THEN ‘E’
END rank
from student join score on student.sno=score.sno

(19)查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。
Select * from student where sno in
(select sno from score where cno=’3-105’ and degree>
(select degree from score where cno=’3-105’ and sno=’109’))

(20)查询score中选学多门课程的同学中分数为非最高分成绩的记录。
Select sc.sno, cno, degree from score sc join ( select sno, max(degree) maxgrade from score group by sno having count(*)>1 ) sg on sc.sno=sg.sno where degree

(21)查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。
Select * from score where degree>( select degree from score where cno=’ 3-105’ and sno=’ 109’ )

(22)查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。
Select sno, sname, sbirthday from student where YEAR(GETDATE())-YEAR(Sbirthday)= (select YEAR(GETDATE())-YEAR(Sbirthday) from student where sno=‘108’)

(23)查询“张旭”教师任课的学生成绩。
Select * from score sc join course c on sc.cno=c.cno join teacher t on c.tno=t.tno where tname=’张旭’

(24)查询选修某课程的同学人数多于5人的教师姓名。
Select tname from teacher t join course c on t.tno=c.tno where cno in ( select cno from score group by cno having count(*)>5 )

(25)查询95033班和95031班全体学生的记录。
Select * from student where class in ( ‘95033’, ‘95031’ )

(26)查询存在有85分以上成绩的课程Cno.
Select distinct cno from score where degree>85

(27)查询出“计算机系”教师所教课程的成绩表。
Select * from score where cno in ( select cno from course c join teacher t on c.tno=t.tno and depart=’计算机系’ )

(28)查询“计算机系”与“电子工程系”不同职称的教师的Tname和Prof。
此题应改为:(28)查询“计算机系”与“电子工程系”不同职称的教师人数。
Select depart, prof, count(*) 人数 from teacher where depart in ( ‘计算机系’, ‘电子工程系’ ) group by depart, prof

(29)查询选修编号为“3-105”课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。
Select sc1.cno, sc1.sno, sc1.degree from score sc1 join score sc2 on sc1.sno=sc2.sno and sc1.cno=’ 3-105’ and sc2.cno=’ 3-245’ and sc1.degree>sc2.degree order by sc1.degree desc

(30)查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree.
Select sc1.cno, sc1.sno, sc1.degree from score sc1 join score sc2 on sc1.sno=sc2.sno and sc1.cno=’ 3-105’ and sc2.cno=’ 3-245’ and sc1.degree>sc2.degree

(31)查询所有教师和同学的name、sex和birthday.
( select sname name, ssex sex, sbirthday birthday from student )
union
( select tname name, tsex sex, tbirthday birthday from teacher )

(32)查询所有“女”教师和“女”同学的name、sex和birthday.
( select sname name, ssex sex, sbirthday birthday from student where ssex=’女’ )
union
( select tname name, tsex sex, tbirthday birthday from teacher where tsex=’女’ )

(33)查询成绩比该课程平均成绩低的同学的成绩表。
Select sno, sc.cno, degree from score sc join ( select cno, avg(degree) avggrade from score group by cno ) cg on sc.cno=cg.cno

(34)查询所有任课教师的Tname和Depart.
Select tname, depart from teacher where tno in (select distinct tno from course )

(35)查询所有未讲课的教师的Tname和Depart.
Select tname, depart from teacher where tno not in (select distinct tno from course )

(36)查询至少有2名男生的班号。
Select class from student where ssex=’男’ group by class having count(*)>1

(37)查询Student表中不姓“王”的同学记录。
Select * from student where sname not like ‘王%’

(38)查询Student表中每个学生的姓名和年龄。
Select sname, YEAR(GETDATE())-YEAR(Sbirthday) sage from student

(39)查询Student表中最大和最小的Sbirthday日期值。
Select max(sbirthday), min(sbirthday) from student

(40)以班号和年龄从大到小的顺序查询Student表中的全部记录。
Select sno, sname, ssex, class, YEAR(GETDATE())-YEAR(Sbirthday) sage from student order by class desc, sage desc

(41)查询“男”教师及其所上的课程。
Select tname, t.tno, cno, cname, tsex from teacher t join course c on t.tno=c.tno where tsex=’男’

(42)查询最高分同学的Sno、Cno和Degree列。
Select * from score where degree=( select max(degree) from score)

(43)查询和“李军”同性别的所有同学的Sname.
Select s1.sname from student s1join student s2 on s1.ssex=s2.ssex where s2.sname=’李军’ and s1.sname!= ’李军’

(44)查询和“李军”同性别并同班的同学Sname.
Select s1.sname from student s1join student s2 on s1.class=s2.class where s2.sname=’李军’ and s1.ssex=s2.ssex and s1.sname!= ’李军’

(45)查询所有选修“计算机导论”课程的“男”同学的成绩表。
Select s.sno, sname, cname, degree from student s, score sc, course c where s.sno=sc.sno and sc.cno=c.cno and cname=’计算机导论’ and ssex=’男’

习题5
1、SQL的查询处理分为哪几个阶段,分别完成什么工作?
答:SQL的查询处理分为以下四个阶段:查询分析、查询检查、查询优化、查询执行。
(1)查询分析:首先对查询语句进行扫描、词法分析和语法分析。
(2)查询检查:根据数据字典对合法的查询语句进行语义检查,即检查语句中的数据库对象是否存在和是否有效。一般采用查询树或语法分析树,来表示扩展的关系代数表达式。
(3)查询优化:查询优化就是选择一个高效执行的查询处理策略。按照优化的层次,查询优化可分为代数优化和物理优化。
(4)查询执行:依据优化器得到的执行策略生成查询计划,由代码生成器生成执行这个查询计划的代码,并执行代码,返回查询结果。

2、查询优化分为哪两种类型?它们的含义分别是什么?
答:查询优化分为代数优化和物理优化。
改变基本操作的次序,使查询语句执行起来更有效,这种查询优化方法仅涉及查询语句本身,而不涉及存取路径,称为代数优化;根据系统提供的存取路径,选择合理的存取策略,例如,选用顺序搜索或者是索引搜索,这称为物理优化。

3、试举例说明启发式优化过程。
答:略。

4、简述物理优化的主要因素。
答:物理优化主要根据数据读取、表连接方式、表连接顺序、排序等技术对查询进行优化。

习题6
1、简述存储系统的层次。
答:一个典型的现代计算机系统通常包括几个不同的可以存储数据的部件。典型的存储介质的层次结构如图6-1所示。

图6-1多层次结构的存储系统

2、文件的逻辑结构有哪些?
答:文件的逻辑结构是用户组织文件时可见的结构,即用户所观察到的文件组织形式。文件的逻辑结构是用户可以直接处理的数据及其结构,它独立于物理特性,又称文件组织。
常见的文件逻辑结构有:
(1)顺序文件,由一系列记录按某种顺序排列形成的文件,其中的记录通常是定长记录,具有较快的查找速度。
(2)索引文件,它为每个文件建立一个索引表,并在索引表中为每条记录建立一个表项。索引表通常按记录键排序。索引表本身是一个定长记录文件,可以实现直接存取。
(3)索引顺序文件,它要为文件建立一张索引表,在索引表中,为每一组记录中的首记录设置一表项,其中含有记录的键值和指向该记录的指针。
文件的逻辑结构按形式分为有结构的记录式文件和无结构的流式文件。
3、索引的概念是什么?
答:数据库中的索引是一个表中所包含的列值的列表,其中注明了表中包含各个值的行数据所在的存储位置。可以为表中的单个列建立索引,也可以为一组列建立索引。
4、索引有哪几种类型?
答:索引分为两大类,一类是聚集索引(Clustered Index,也称为聚簇索引),另一类是非聚集索引(Non-Clustered Index,也称为非聚簇索引)。聚集索引对数据按索引关键字值进行物理排序,非聚集索引不对数据按索引关键字值进行物理排序,而只将索引关键字按值进行排序。

习题7
1、数据库的安全保护通过哪些方面来实现?
答:DBMS对数据库的安全与保护通过四个方面来实现,即数据安全性控制、数据完整性控制、数据库的并发控制和数据库的恢复。

2、什么是数据的安全性控制?
答:防止未经授权的用户存取数据库中的数据,避免数据的泄露、更改或破坏。

3、什么是数据的完整性控制?
答:保证数据库中数据及语义的正确性和有效性,防止任何对数据造成错误的操作。

4、什么是事务?事务的基本性质是什么?
答:所谓事务(Transaction)是用户定义的一个数据库操作序列,这些操作要么些操作要么可全部成功运行,否则,将不执行其中任何一个操作,是一个不可分割的工作单元。
从保证数据库完整性出发,我们要求数据库管理系统维护事务的几个性质:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability),简称为 ACID特性(这一缩写来自四个性质的第一个英文字母的组合),
5、什么是调度?什么是可串行化调试?
答:一般来讲,在一个大型的DBMS中,可能会同时存在多个事务处理请求,系统需要确定这组事务的执行次序,即每个事务的指令在系统中执行的时间顺序,这称作事务的调度。
定义多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的结果相同,我们称这种调度策略为可串行化(Serializable)的调度。
可串行性(Serializability)是并发事务正确性的准则。按这个准则规定,一个给定的并发调度,当且仅当它是可串行化的,才认为是正确调度。

6、并发操作会带来哪几类问题?并试举例说明。
答:并发操作会带来以下问题:
(1) 丢失修改(Lost Update)
两个事务T1和T2读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改被丢失。丢失修改又称作写-写错误。
(2)脏读(Dirty Read)
事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤销,这时T1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,则T2读到的数据就为“脏”数据,即不正确的数据。脏读又称作写-读错误。
(3) 不可重复读(Non-Repeatable Read)
事务T1 读取某一数据后,事务T2 对其做了修改,当T1 再次读取该数据时,得到与前次不同的值。不可重复读又称作读-写错误
(4) 幻象读(Phantom Read)
事务T2 按一定条件读取了某些数据后,事务T1 插入(删除)了一些满足这些条件的数据,当T2 再次按相同条件读取数据时,发现多(少)了一些记录。

7、数据库的并发控制的主要技术是什么?
答:并发控制的主要技术是封锁(Locking)。

8、什么是死锁?什么是活锁?试举例说明。
答:如果事务T1封锁了数据R,事务T2又请求封锁R,于是T2等待。T3也请锁R,当T1释放了R上的封锁之后系统首先批准了T3的请求,T2仍然等等。然后T4又请求封锁R,当T3释放了R上的封锁之后系统又批准了T4的请求……T2有可能永远等待,这就是活锁的情形。
如果事务T1封锁了数据R1,T2封锁了数据R2,然后T1又请求封锁R2,因T2已封锁了R2,于是T1等待T2释放R2上的锁。接着T2又申请封锁R1,因T1已封锁了R1,T2也只能等待T1释放R1上的锁。这样就出现了T1在等待T2,而T2又在等待T1的局面,T1和T2两个事务永远不能结束,形成死锁。
9、什么是两段锁协议?其作用是什么?
答:两段锁协议(two-phase locking protocol)就是保证并发调度可串行性的封锁协议。该协议要求每个事务分两个阶段提出加锁和解锁申请:
(1)在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁;
(2)在释放一个封锁之后,事务不再申请和获得任何其他封锁。

习题9
1、解释下列名词:
函数依赖、部分函数依赖、传递函数依赖、1NF、2NF、3NF
答:函数依赖是指关系中一个或一组属性的值可以决定其它属性的值。函数依赖正象一个函数 y = f(x) 一样,x的值给定后,y的值也就唯一地确定了。
部分函数依赖是指若x->y 并且,存在X的真子集x1,使得x1->y,则 y部分依赖于 x。
传递函数依赖是指在关系模式R(U)中,设X,Y,Z是U的不同的属性子集,如果X确定Y、Y确定Z,且有X不包含Y,Y不确定X,(X∪Y)∩Z=空集合。
1NF是指不包含非原子项属性的关系。
2NF:如果R(U,F)∈1NF,并且R中的每个非主属性都完全函数依赖于主键,则R(U,F)∈2NF。
3NF:如果R(U,F)∈2NF,并且所有的非主属性都不传递依赖于主键,则R(U,F)∈3NF。

2、设有关系模式R(A, B, C, D),函数依赖集F={A→B, B→A, AC→D, BC→D, AD→C, BD→C, A→CD, B→CD },回答下列问题:
(1)R的键是什么?
(2)R是否为3NF?为什么?
解:(1)R的键是B
(2)R是第3NF,因ACD都直接全部依赖于B。

3、针对学生选课系统的3个关系模式,完成下列各题:
(1)写出每个关系模式的函数依赖,分析是否存在部分依赖、传递依赖?
(2)给出每个关系模式的键、外键。
(3)每个满足什么范式?
解:(1)S关系中,Sno->Sname, Sno->Ssex, Sno-> Sbirthday, Sno->Sdept, Sno->Memo
C关系中,Cno->Cname, Cno->PreCno, Cno->Credit, Cno->Semester
在SC关系中,(Sno,Cno)->Grade
(2)在S关系中键为Sno,在C关系中键为Cno,在SC关系中键为Sno,Cno
(3)都满足3NF

4、设有关系模式R(A, B, C, D, E),函数依赖集F={A→B, A→C, C→D, D→E },若分解关系R为R1(A, B, C)和R2(C, D, E)。回答下列问题:
(1)确定R1和R2分别是什么范式?
(2)判断此分解的无损连接性。
解:(1)R1为3NF,R2为2NF
(2)此分解为无损分解。(过程略)

5、设有关系模式R(A, B, C, D, E, F),函数依赖集F={E→D, C→B, CE→F, B→A },回答下列问题:
(1)确定R是什么范式?
(2)如何将R无损连接并保持函数依赖地分解为3NF。
解:(1)R是1NF
(2)将R分解为:R1(E,D),R2(C,B),R3(C,E,F),R4(B,A)即为3NF。

习题10
1、解释下列名词:
数据字典、数据流图、聚集
答:数据字典是指对数据的数据项、数据结构、数据流、数据存储、处理逻辑、外部实体等进行定义和描述。
数据流图,简称DFD,它从数据传递和加工角度,以图形方式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程,是结构化系统分析方法的主要表达工具及用于表示软件模型的一种图示方法。
聚集是一种特殊形式的关联。聚集表示类之间的关系是整体与部分的关系。

2、数据库的设计过程一般包括几个阶段?每个阶段的主要任务是什么?
答:主要包括:需求分析、概念模型设计、逻辑模型设计、物理模型设计几个阶段。需求分析主要任务是获取需求、概念模型设计主要工作是将现实世界的概念数据模型设计成数据库的一种逻辑模式,即适应于某种特定数据库管理系统所支持的逻辑数据模式。数据库的物理结构设计是对已经确定的数据库逻辑模型,利用数据库管理系统提供的方法、技术,以较优的存储结构、数据存取路径、合理的数据存储位置以及存储分配,设计出一个高效的、可实现的物理数据库结构。

3、简述ER图转化为关系模型的转化规则。
答:一个实体转换为一个关系模式。实体的属性就是关系的属性,实体的标识属性就是关系的主键。
对于实体间的联系有以下不同的情况:
(1)1∶1联系:一般情况下是与任意一端所对应的关系模式合并,并且在该关系模式中加入另一个实体的标识属性和联系本身的属性,同时该实体的标识属性作为该关系模式的外键。
(2)1∶n联系:一般是与n端所对应的关系模式合并,并且在该关系模式中加入1端实体的标识属性以及联系本身的属性,并将1端实体的标识属性作为该关系模式的外键。
(3)m∶n联系:必须转换为一个独立的关系模式,且与该联系相连的各实体的标识属性以及联系本身的属性均转换为此关系模式的属性,且该关系模式的主键包含各实体的标识属性,外键为各实体的标识属性。
(4)三个或三个以上实体间的一个多元联系也是转换为一个关系模式,与该多元联系相连的各实体的标识属性以及联系本身的属性均转换为此关系模式的属性,而此关系模式的主键包含各实体的标识属性,外键为各相关实体的标识属性。
具有相同主键的关系模式可以合并。

4、学校有若干个系,每个系有若干班级和教研室,每个教研室有若干教师,每个教师教若干门课程。每个班有若干个学生,每个学生选修若干门课程,每门课程有若干个学生选修。
(1)根据以上描述,绘制出ER图。
(2)将ER图转化为关系模型,只需要给出每个关系模式的名称。
解:(1)

(2)将以上EF图转化为关系模型后应该有以下关系:系、教研室、班、教师、学生、课程、选课。

5、假如银行储蓄系统的功能是:将储户填写的存款单或取款单输入系统。如果是存款,系统记录存款人姓名、住址、存款类型、存款日期和利率等信息,并打印出存款单给储户;如果是取款单,系统计算清单给用户。
(1)画出该系统的数据流图。
(2)画出该系统的模块结构图。
解:略

6、根据下列描述,画出相应的E-R图,并将E-R图转换为满足3NF的关系模式,指明每个关系模式的主键和外键。
现要实现一个顾客购物系统,需求描述如下:一个顾客可去多个商店购物,一个商店可有多名顾客购物;每个顾客一次可购买多种商品,但对同一种商品不能同时购买多次,但在不同时间可购买多次;每种商品可销售给不同的顾客。对顾客的每次购物都需要记录其购物的商店、购买商品的数量和购买日期。需要记录的“商店”信息包括:商店编号、商店名、地址、联系电话;需要记录的顾客信息包括:顾客号、姓名、住址、身份证号、性别。需要记录的商品信息包括:商品号、商品名、进货价格、进货日期、销售价格。
解:略

习题11
1、什么是T-SQL?
答:T-SQL(Transaction-SQL)语言是SQL Server的专用语言。

2、T-SQL语言主要功能有哪几部分?
答:它包括两部分:一是SQL语句的标准语言部分,利用这些标准的SQL语言编写的应用程序和脚本,可以自如地移到其他的关系型数据库管理系统中执行;二是在标准SQL语句上进行的扩充。

3、T-SQL语言标识符定义的规则是什么?
答:(a)首字符必须是Unicode 标准定义的字母,或_,@,或#。
(b)后续字符可以Unicode 标准定义的字母,或_,或@,或#,或基本拉丁字母,或十进制数字,或美元符号($)。
©不能与T-SQL保留字相同。
(d)不允许嵌入空格或其他特殊字符。
(e)包含的字符数必须在1~128之间。

4、T-SQL语言的流程控制语句分为哪些?
答:T-SQL语句使用的流程控制语句与常见的程序设计语言类似。包括IF语句、CASE语句、GOTO语句、WHILE语句、RETURN语句等。

5、简述从高到低的运算符优先级顺序。
答:顺序如下表所示:
优先级 运算符
1 ~(位非)
2 *(乘)、/(除)、%(取模)
3 +(正)、-(负)、+(加)、+(连接)、-(减)、&(位与)
4 =, >、<、>=、<=、<>、!=、!>、!<(比较运算符)
5 ^(位异或)、|(位或)
6 NOT
7 AND
8 ALL、ANY、BETWEEN、IN、LIKE、OR、SOME
9 =(赋值)

6、使用存储过程有哪些优点,存储过程分为哪几类?
答:使用存储过程有以下优点:
(1)存储过程允许标准组件式编程;(2)存储过程能够实现较快的执行速度;(3)存储过程减轻网络流量;(4)存储过程可被作为一种安全机制来使用;(5)自动完成需要预先执行的任务。
存储过程分为以下几类:系统存储过程、用户存储过程、临时存储过程、扩展的用户存储过程。

7、游标的执行步骤有哪些?
答:在SQL Server中,游标的生命周期包含有五个阶段:声明游标、打开游标、读取游标数据、关闭游标、释放(删除)游标。

8、存储过程和触发器有什么区别?
答:触发器是一类特殊的存储过程,与表的关系密切,用于保护表中的数据。当有操作影响到触发器保护的数据时,触发器将自动执行。而存储过程则需要显示调用才会执行。

9、触发器有哪两种类型?
答:触发器有两大类:DML触发器和DDL触发器。

10、试编写一触发器,实现在删除学生信息时,对选课信息的级联删除。
答:CREATE TRIGGER delStrudnet
ON Student AFTER DELETE
AS
DELETE SC WHERE Sno IN (
SELET Sno FROM DELETED )

11、试编写一存储过程,根据输入的学生姓名,输出学生的成绩单(包括学号、姓名、课程名、成绩)。
答:CREATE PROCEDURE outGrade
@sno char(8)
AS
SELECT S.Sno, Sname, Cname, Grade FROM Student S, SC, Course C
WHERE S.Sno=SC.Sno AND SC.Cno=C.Cno AND S.Sno=@sno

<数据库原理与应用> (SQL Server 2012)---基于计算思维 教材习题答案_第1张图片
<数据库原理与应用> (SQL Server 2012)---基于计算思维 教材习题答案_第2张图片

你可能感兴趣的:(笔记,数据库)