第1章 数据库系统概论
三、简答题
1. 答:数据库DB是长期存储在计算机内、有组织的、统一管理的相关数据的集合。DB能为各种用户共享,具有较小冗余度、数据间联系紧密而又有较高的数据独立性等特点。
2. 答:数据库管理系统DBMS是位于用户与操作系统(OS)之间的一层数据管理软件,它为用户或应用程序提供访问DB的方法,包括DB的建立、查询、更新及各种数据控制。DBMS总是基于某种数据模型,可以分为层次型、网状型、关系型和面向对象型等。
3. 答:①数据定义语言及其翻译处理程序;②数据操纵语言及其编译(或解释)程序;③数据库运行控制程序;④实用程序。
4. 答: 文件系统中的文件是面向应用的,一个文件基本上对应于一个应用程序,文件之间不存在联系,数据冗余大,数据共享性差,数据独立性差;数据库系统中的文件不再面向特定的某个或多个应用,而是面向整个应用系统,文件之间是相互联系的,减少了数据冗余,实现了数据共享,数据独立性高。
5. 答:①实现数据的集中化控制;②数据的冗余度小,易扩充;③采用一定的数据模型实现数据结构化;④避免了数据的不一致性;⑤实现数据共享;⑥提供数据库保护;⑦数据独立性;⑧数据由DBMS统一管理和控制。
6. 答:数据独立性是指数据库中的数据独立于应用程序,即数据的逻辑结构、存储结构与存取方式的改变不影响应用程序。数据独立性一般分为数据的逻辑独立性和数据的物理独立性。
数据逻辑独立性是指数据库总体逻辑结构的改变(如修改数据定义、增加新的数据类型、改变数据间的联系等)不需要修改应用程序。
数据物理独立性是指数据的物理结构(存储结构、存取方式等)的改变,如存储设备的更换、物理存储格式和存取方式的改变等不影响数据库的逻辑结构,因而不会引起应用程序的改变。
7. 答:数据库系统中数据不是面向单个应用组织的,而是直接面向数据本身及数据间的内在联系来组织的,因此可以方便地供多用户多应用共享,这样,数据的冗余度就大幅度降低了。
8. 答:数据库应用系统是基于数据库创建的,能实现用户相关实际需求的应用系统,而数据库管理系统则是运行于操作系统之上的,专用于对数据库进行管理的系统软件。数据库应用系统对数据库的所有操作都要通过数据库管理系统来实现。数据库管理系统通常会提供接口和工具以支持数据库应用系统的开发。
9. 答:完整性规则是库中数据及数据间联系应满足的制约和依存规则。完整性规则可用以限定数据库的状态以及状态的变化,以保证库中数据的正确、有效和相容,所以要定义完整性规则。
第二章
三、简答题
1. 答:(1)关系:一个关系就是一张二维表,每个关系都有一个关系名。关系是一个属性数目相同的元组的集合。
(2)属性:就是关系的标题栏中各列的名字,描述该列各数据项的含义,即二维表中垂直方向的列称为属性。
(3)元组:除了关系的标题栏外,二维表中水平方向的行称为元组。
(4)分量:元组中的一个属性值。
(5)关系模式是对关系的描述,关系模式是静态的、稳定的。关系模式可以形式化地表示为:R(U,D,dom,F)。
(6)域是一组具有相同数据类型的值的信息或数据,在关系中用来表示属性的取值范围。域中的元素可以完全不同,也可以部分或全部相同。
2. 答:关系具有如下性质:
(1)关系中不允许出现相同的元组。
任意两个元组不能完全相同。因为数学上集合中没有相同的元素,而关系是元组的集合,所以作为集合元素的元组应该是唯一的。
(2)关系中元组的顺序(即行序)可以任意。
元组上下无序,在一个关系中可以任意交换两行的次序。因为集合中的元素是无序的,所以作为集合元素的元组也是无序的。
(3)关系中属性的顺序无所谓,即列的顺序可以任意交换。
按属性名引用时,属性左右无序。交换时,应同属性名一起交换,否则将得到不同的关系。
(4)同一属性名下的各个属性值必须来自同一个域,是同一类型的数据。
列是同质的(Homogeneous),即每一列中的分量是同一类型的数据,来自同一个域。
(5)关系中各个属性必须有不同的名字,而不同的属性可来自同一个域。
不同的列可来自同一个域,其中的每一列称为一个属性,不同的属性要设置不同的属性名。例如专职与兼职是两个不同的属性,但它们可取自同一个域如{教师,工人,农民}。
(6)关系不允许表中套表。
关系中的每一个属性值都是不可分解的,表中的元组分量必须是原子的。关系中的每一个数据项必须是简单的数据项,而不是组合数据项。
3. 答:关系的键是指属性或属性组合,其值能够唯一地标识一个元组
,常用的关系的键主要有以下几种:
(1)候选键(Candidate Key): 能唯一标识关系中元组的一个属性或属性集,称为候选键。
(2)主关系键( Primary Key): 若一个关系有多个候选键,通常选用一个候选键作为查询、插入或删除元组的操作变量。被选用的候选键称为主关系键。
(3)外部关系键(Foreign key):如果关系R2 的一个或一组属性A不是R2的主关系键,而是另一关系R1的主关系键,则该属性或属性组A称为关系R2的外部关系键或外码。
4. 答:实体完整性规则:若属性A是基本关系R的主属性,则属性A不能取空值。
参照完整性规则:若属性(或属性组 )F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系 ),则对于R中每个元组在F上的值必须为:或者取空值(F的每个属性值均为空值 );或者等于S中某个元组的主码值。
外部属性可以为空,因为外部属性对其基本关系本身是非码,不是标识元组的属性值,故可以为空。因此属性值尚未确定时,此外部属性为空。
5. 答:关系数据语言可以分为元组关系演算语言ALPHA和域关系演算语言QBE,前者以元组变量作为谓词变元的基本对象;后者以元组变量的分量即域变量作为谓词变员的基本对象。
6. 答:连接运算是将关系的属性拼成一个具有更多属性的关系,它不理会属性的重复与否,只是把参加运算的关系的属性连接起来即可。运算过程通过连接条件控制选取符合条件的元组。当连接运算符θ为“=”时,称为等值连接。
自然连接是删除重复属性的等值连接,它是最常用的连接运算,是连接运算的一个特例。参加运算的关系一般具有一个或多个同名属性。在连接中,同名属性一般是外关键字,否则会出现重复数据。
四、综合题
1. 答:
2. 答:
3. 答:(1):关系代数:ПSELL,zno (σtno='t1'(SELL))
ALPHA语言:GET W (SELL. zno):SELL. tno ='t1'
QBE语言:
(2):关系代数:Пzn, zno, zsex(AUTHOR)
ALPHA语言:GET W (AUTHOR.zn, AUTHOR.zno)
QBE语言:
(3):关系代数:Пzn(σzbp='山东'∧zsex=’男’(AUTHOR)
ALPHA语言:GET W (AUTHOR. zn): AUTHOR. zbp ='山东' AUTHOR. zsex=’男’
QBE语言:
(4):关系代数:Пdn(σtno='t1' (READER SELL))/用dno自然连接
ALPHA语言:RANGE READER CX
SELL EX
GET W (READER.dn): CX EX(EX.dno=CX.dno∧CX.tno =‘t1’)
QBE语言:
(5):关系代数:Пzn(AUTHOR (Пzno(σtpub≠'高等教育出版社'(BOOK SELL))))
ALPHA语言:
RANGE AUTHOR CX
SELL EX
BOOK TX
GET W (AUTHOR.zn): CX EX(CX.zno=EX.zno∧EX.tno=TX.tno∧TX. tpub ≠'高等教育出版社')
QBE语言:
第3章 关系数据库标准语言SQL
三、简答题
1.答:SQL语言的优点是:
(1)它是非过程化语言
(2)它是统一的语言
(3)它是所有关系数据库的公共语言。
它提供的命令主要有:
(1)查询数据
(2)在表中插入、修改和删除记录
(3)建立、修改和删除数据对象
(4)控制对数据和数据对象的存取
(5)保证数据库一致性和完整性
2. 答: 索引是基本表的目录,按某一字段或一组字段对数据表进行排序,以加快查找速度。索引之所以能加快查询速度是因为:首先,索引文件只有两个字段,一个是要排序的字段,一个是该记录在原数据表中的记录号,其文件大小要比原数据表小得多;其次,索引文件使用二分法查找记录,这种方法比顺序查找快数倍。
3. 答:按照索引记录的存放位置可以将索引分为聚集索引和非聚集索引。按照索引记录是否允许具有索引值相同的行,可以将索引分唯一索引和非唯一索引。按照索引记录字段个数可区分是否为组合索引。
聚集(簇)索引按照索引字段来排列记录,并按照指定的次序将记录存储在表中。
非聚集索引按照索引字段排列记录,但排列的结果并不存储在表中,而是存储在另外的位置。
唯一索引,不允许具有索引值相同的行,即每一个索引值只对应唯一的记录,从而禁止重复的索引或键值。
组合索引是将两个或两个以上的字段组合起来建立的索引,单独的字段允许有重复值。
4. 答:当一个查询请求涉及到数据库的多个表时,必须用一定的连接条件将这些表连接起来,才能提供给用户需要的信息。
SQL中可通过WHERE连接查询方式和JOIN连接查询方式实现连接查询。
5. 答:JOIN连接查询方式中有5种连接形式,分别是:(1)INNER JOIN(内连接)(2)LEFT OUTER JOIN(左连接)(3)RIGHT OUTER JOIN(右连接)(4)FULL OUTER JOIN(全连接)(5)CROSS JOIN(交叉连接)。
6. 答:嵌套查询通常分为不相关子查询和相关子查询两类。
不相关子查询:子查询的查询条件不依赖于父查询。子查询可以独立运行,并且只执行一次,执行完毕后将值传递给外部查询。
相关子查询:子查询的查询条件依赖于父查询。子查询不能独立运行,必须依靠父查询数据,并且外部查询执行一行,子查询就执行一次。
7. 答:嵌套查询中ANY或ALL谓词与集函数有如下对照关系:
8. 答:视图是用户观察数据库中数据的重要机制,通常用来集中、简化和自定义每个用户对数据库的不同认识。视图也可用作安全机制,方法是允许用户通过视图访问数据,而不授予用户直接访问视图基础表的权限。视图通常分类如下:
9. 答:为了保证视图更新约束,在视图中增加 WITH CHECK OPTION子句,这样对视图的所有插入和修改操作都将受到检查,以保证插入的或修改的元组确为视图所见(即满足视图定义条件)。视图的作用如下:
视图能使用户以多种角度看待同一数据
视图能够简化用户的操作
视图为重构数据库提供了一定程度的逻辑独立性
视图能够为机密数据提供安全保护
10. 答:保护数据库的安全性是指保护数据库,防止不合法的使用所造成的数据泄漏和破坏。数据库系统中,保证数据库安全性的主要措施是进行存取控制。不同的用户对不同的数据具有何种操作权力,是由数据库管理员(DataBase Administrator,DBA)和用户数据库所有者(DataBase Owner,DBO)根据具体情况决定的,SQL语言为DBA和DBO定义和回收这种权限提供了手段。
11答:权限机制是主要的安全机制,其基本思想是授予用户不同的权限,使用户能够进行的数据库操作以及所操作的数据限定在指定的范围内,禁止用户超越权限对数据库进行非法的操作,必要时可以收回权限,从而保证数据库的安全性。
角色是多种权限的集合,可以授予用户或其他角色。当要为某一用户同时授予或收回多项权限时,则可以把这些权限定义为一个角色,对此角色进行操作即可。这样就避免了许多重复性的工作,简化了管理数据库用户权限的工作。
12.答:若运用T-SQL 来进行编程,有两种方法。其一,在本地存储T-SQL程序,并创建应用程序向SQL Server 发送命令来对结果进行处理;其二,把部分用T-SQL编写的程序作为存储过程存储在SQL Server 中,并创建应用程序来调用存储过程,对数据结果进行处理,存储过程能够通过接收参数向调用者返回结果集,结果集的格式由调用者确定。
13.答:存储过程具有以下优点:
(1)存储过程允许标准组件式编程。
(2)存储过程能够实现较快的执行速度。
(3)存储过程能够减少网络流量。
(4)存储过程可被作为一种安全机制来充分利用。
14.答:SQL Server支持以下5种类型的存储过程:
(1)系统存储过程:此类存储过程内置于SQL Server,不能任意修改,提供有关数据库模式、对象名、约束、数据类型以及许可等方面的信息。
(2)局部存储过程:此类存储过程由数据库管理员或SQL Server开发人员编写。
(3)临时存储过程:此类存储过程由数据库管理员和SQLServer开发人员编写,但是只存在于连接期间。
(4)远程存储过程:此类存储过程存在于远程服务器中,并且可以被一个初始服务器引用,用于分布式应用程序中。
(5)扩展存储过程:此类存储过程在功能上类似于局部存储过程,但它们可以引用SQL Server外部的函数。
15.答:创建存储过程使用CREATE PROCEDURE 语句,其语法如下:
CREATE PROC [ EDURE ] procedure_name [ ; number ]
[ { @parameter data_type }
[ VARYING ] [ = default ] [ OUTPUT ]] [,…n ]
[ WITH { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]
[ FOR REPLICATION ]
AS sql_statement [n]
四、综合题
1. (1) CREATE TABLE SC
( Sno CHAR(5) ,
Cno CHAR(3) ,
Grade int)
(2) CREATE INDEX SCno
ON SC(Sno ASC,Cno DESC)
(3) SELECT Sno,Sname,Ssex,Sage,Sdept
FROM Student
或
SELECT *
FROM Student
(4) SELECT Sname,Sdept,Sage
FROM Student
WHERE Sage BETWEEN 20 AND 23
(5) SELECT Sname,Sno
FROM Student
WHERE Sname LIKE '_明 %'
(6) SELECT COUNT(*)
FROM Student
(7) SELECT Sno
FROM SC
WHERE Cno='M01'
UNION
SELECT Sno
FROM SC
WHERE Cno= 'M02';
(8) UPDATE Student
SET Sage=23
WHERE Sno='08001'
2、(1) SELECT C#, Cn
FROM C
WHERE TEACHER=‘周亮’
(2) SELECT S#, Sn
FROM S
WHERE Sa>23 AND Sex=‘男’
(3) 方法一:SELECT Cn, TEACHER
FROM C
WHERE C# IN
(SELECT C#
FROM SC
WHERE S#=‘S3’)
方法二:SELECT Cn, TEACHER
FROM C, SC
WHERE C.C#=SC.C# AND SC.S#=‘S3’
方法三:SELECT Cn, TEACHER
FROM C
WHERE EXISTS
(SELECT *
FROM SC
WHERE SC.C#=C.C# AND S#=‘S3’)
(4) 方法一:SELECT Sn
FROM S
WHERE Sex=‘女’ AND EXISTS
(SELECT *
FROM SC
WHERE SC.S#=S.S# AND SC.C# IN
(SELECT C#
FROM C
WHERE THACHER=‘周亮’)
)
方法二:SELECT Sn
FROM S
WHERE Sex=‘女’
(SELECT *
FROM SC,C
WHERE SC.S#=S.S# AND SC.C#=C.C# AND C.TEACHER=‘周亮’)
(5) 方法一:SELECT C#
FROM C
WHERE NOT EXISTS
(SELECT *
FROM SC
WHERE SC.C#=C.C# AND SC.S# IN
(SELECT S#
FROM S
WHERE Sn=‘李清’)
)
方法二:SELECT C#
FROM SC,S
WHERE SC.C#=C.C# AND SC.S#=S.S# AND S.Sn=‘李清’
(6) 方法一:SELECT DISTINCT S1.S#
FROM SC AS SC1, SC AS SC2
WHERE SC1.S#=SC2.S# AND SC1.C#!=SC2.C#
方法二:SELECT S#
FROM SC
GROUP BY S#
HAVING COUNT(*)>=2
(7) 方法一:SELECT C#, Cn
FROM C
WHERE NOT EXISTS
(SELECT *
FROM S
WHERE NOT EXISTS
(SELECT *
FROM SC
WHERE SC.S#=S.S# AND SC.C#=C.C#)
)
方法二:SELECT C#, Cn
FROM C
WHERE NOT EXISTS
(SELECT *
FROM S
WHERE S# NOT IN
(SELECT S#
FROM SC
WHERE SC.C#=C.C#)
方法三:SELECT C#, Cn
FROM C
WHERE C# IN
(SELECT C#
FROM SC
GROUP BY C#
HAVING COUNT(*)=
(SELECT COUNT(*)
FROM S
)
(8) 方法一:SELECT DISTINCT S#
FROM SC
WHERE C# IN
(SELECT C#
FROM C
WHERE TEACHER=‘周亮’)
方法二: SELECT DISTINCT S#
FROM SC
WHERE EXISTS
(SELECT *
FROM C
WHERE C.C#=SC.C# AND TEACHER=‘周亮’)
方法三: SELECT DISTINCT S#
FROM SC, C
WHERE SC.C#=C.C# AND C.TEACHER=‘周亮’
(9) SELECT Sn, Sa
FROM S
WHERE S.Sex=‘男’ AND S.Sa>
(SELECT AVG(S1.Sa)
FROM S AS S1
WHERE S1.Sex=‘女’)
(10)方法一: SELECT S1.Sn, S1.Sa
FROM S,S1
WHERE S1.Sex=‘男’ AND S1.Sa>
( SELECT Max(S2.Sa)
FROM S,S2
WHERE S2.Sex=‘女’ )
方法二: SELECT S1.Sn, S1.Sa
FROM S,S1
WHERE S1.Sex=‘男’ AND S1.Sa>ALL
(SELECT S1.Sa
FROM S,S2
WHERE S2.Sex=‘女’ )
(11)方法一: Select Sn
from S
where S.S#>
(select S1.S#
from S as S1
where S1.Sn='曹童') and S.Sa<
( select S2.Sa
from S as S2
where S2.Sn='曹童')
方法二: Select Sn
from S as S1
where Exists
(select *
from S as S2
where S2.Sn='曹童') and S1.S#>S2.S# and S1.Sa
¥29.8
¥9.9
¥59.8