114章《数据库原理及应用SQLServer版》 唐国良蔡中民习题参考答案Word文档格式.docx
《114章《数据库原理及应用SQLServer版》 唐国良蔡中民习题参考答案Word文档格式.docx》由会员分享,可在线阅读,更多相关《114章《数据库原理及应用SQLServer版》 唐国良蔡中民习题参考答案Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
编译原理
Android应用开发
Java语言程序设计
1.14假设某商业集团数据库中有1个关系模式R(商店编号,商品编号,数量,部门编号,负责人)。
如果规定:
(a)每个商店的每种商品只在一个部门销售。
(b)每个商店的每个部门只有一个负责人。
(c)每个商店的每种商品只有一个库存数量。
(1)写出关系模式R的基本函数依赖集
(2)找出关系模式R的候选码。
(3)关系模式R最高已经达到第几范式?
为什么?
(4)如果R不属于3NF,请将R分解成3NF。
分析与解答:
(1)基本的函数依赖有:
(商店编号+商品编号)→部门编号
(商店编号+部门编号)→负责人
(商店编号+商品编号)→数量
(2)由题意,上面的函数依赖可知“商店编号”是主属性,商品编号也是主属性,由这两个属性,可以确定关系元组的所有属性,所以R的候选码是:
商店编号+商品编号。
(3)R(商店编号,商品编号,数量,部门编号,负责人)最高已达到2NF。
因为负责人是码的传递依赖。
(4)要达到3NF,必须消除非主属性对码的传递依赖。
对R分解后的两个模式如下:
R1(商店编号,商品编号,数量,部门编号)
R2(部门编号,负责人)
第2章
一、填空题
(1)可信任性、高效性和智能性。
(2)自动、手动和禁止。
(3)SQLServerManagementStudio、sp_configuret系统存储过程和SET语句。
(4)系统数据库和示例数据库。
(5)master、model、msdb和tempdb。
二、简答题
1、答:
SQLServer有如下两种身份验证模式。
(1)Windows身份验证模式:
该身份验证模式是在SQLServer中建立与Windows用户账户对应的登录账号,在登录Windows后,登录SQLServer就不用再一次输入用户名和密码了。
(2)混合模式(Windows身份验证和SQLServer身份验证):
该身份验证模式就是在SQLServer中建立专门的账户和密码,这些账户和密码与Windows登录无关。
在登录Windows后,登录SQLServer还需要输入用户名和密码。
2、答:
略。
3、答:
一是管理工具SQLServerManagementStudio窗口中通过方便的图形化向导创建,二是通过编写Transact-SQL语句创建。
第3章
一、
(1)B
(2)A(3)C(4)A
二、
(1)11
(2)表、视图、索引、约束、存储过程、触发器、默认值、用户和角色、规则、类型、函数
(3)利用SQLServerManagementStudio创建数据库
利用T-SQL创建数据库
三、答:
SQLServer2008数据库文件的分类及特点如下:
(1)主数据文件。
主数据文件简称主文件,正如其名字所示,该文件是数据库的关键文件,包含了数据库的启动信息,并且存储数据。
每个数据库必须有且仅能有一个主文件,其默认扩展名为.mdf。
(2)辅助数据文件。
辅助数据文件简称辅(助)文件,用于存储未包括在主文件内的其他数据。
辅助文件的默认扩展名为.ndf。
辅助文件是可选的,根据具体情况,可以创建多个辅助文件,也可以不使用辅助文件。
一般当数据库很大时,有可能需要创建多个辅助文件。
而当数据库较小时,则只需要创建主文件而不需要创建辅助文件。
(3)日志文件。
日志文件用于保存恢复数据库所需的事务日志信息。
每个数据库至少有一个日志文件,也可以有多个,日志文件的扩展名为.ldf。
日志文件的存储与数据文件不同,它包含一系列记录,这些记录的存储不以页为存储单位
第4章
一、选择题
1.B2.B3.A
1.答:
空值(NULL)通常表示未知、不可用或将在以后添加的数据。
若一个列允许为空值,则向表中输入记录值时可不为该列给出具体值。
而一个列若不允许为空值,则在输入时必须给出具体值。
2.答:
约束是指表中数据应满足一些强制性条件,这些条件通常由用户在设计表时指定。
常用约束有非空约束(NOTNULL)、检查约束(CHECK约束)、唯一约束(UNQUE约束)、主键约束(PRIMARYKEY约束)、外键约束(FOREIGNKEY约束)五种。
3.答:
MicrosoftSQLServer2008系统提供了28种数据类型。
数字数据类型11种:
BIGINT、INT、SMALLINT、TINYINT、BIT、DECIMAL、NUMERIC、MONEY、SMALLMONEY、FLOAT和REAL。
字符数据类型6种:
CHAR、VARCHAR、TEXT、NCHAR、NVARCHAR和NTEXT。
日期和时间数据类型2种:
DATETIME和SMALLDATETIME。
二进制数据类型3种:
BINARY、VARBINARY和IMAGE。
其他类型6种:
CURSOR、SQL_VARIANT、TABLE、TIMESTAMP、UNIQUEIDENTIFIER和XML。
4.答:
可以通过ManagementStuio界面和T-SQL语句两种方式创建数据表。
第5章
1.
(1)C
(2)D(3)C(4)B(5)A
2.
(1)搜索以“张”开头,并且第二个汉字不是“华”的字符串。
(2)ASCDESCASC
(3)COUNT(*)COUNT()MIN()MAX()SUM()AVG()COUNT(*)
(4)UNIONEXCEPTINTERSECT
第6章
1.答:
区别:
基表是数据库中存储数据的基本单位,所有的数据都存放在数据表即基表中。
而视图只是由SELECT语句组成的查询定义的虚拟表,因此数据库在存储视图时只存储视图的定义,虽然与普通的表一样视图由字段和记录组成,但本身不存储数据。
联系:
视图中的数据是根据SELECT语句在基表中查询而获得的,一旦数据表中的数据更改则视图中的数据也会跟着更改。
而如果更改视图中的数据则是通过视图修改了视图所对应的基表中的数据,因此基表是视图的基础二者密不可分。
2.答:
视图(View)是一种虚拟数据库对象,是从用户使用数据库观点出发,为用户提供了一种从一个特定的角度来查看数据库中数据的方法。
优点:
简化了用户对数据的查询和处理。
使用户集中视点增加数据的可读性。
可以保证数据的逻辑独立性。
增加了数据的安全性。
3.答:
(1)在视图中修改的列必须直接引用表列中的基础数据。
它们不能通过其他方式派生,例如通过聚合函数(AVG、COUNT、SUM、MIN、MAX等)或者通过表达式并使用列计算出其他列的情况。
使用集合运算符(UNION、UNIONALL、CROSSJOIN、EXCEPT和INTERSECT)形成的列得出的计算结果不可更新。
(2)被修改的列不受GROUPBY、HAVING或DISTINCT子句的影响。
(3)创建视图的SELECT语句的FROM子句中至少要包含一个基表。
4.将创建视图的基表从数据库中删除掉,视图也会一并删除吗?
答:
不会。
5.答:
USEstu_info
GO
CREATEVIEWavg_studAS
SELECTstudent.sname,AVG(grade.grade)AS平均分FROMstudent,grade
WHEREstudent.s_id=grade.s_id
GROUPBYstudent.s_id,student.sname
第7章
为了提高查找速度而提出的一种记录着表中一列或多列按照一定顺序建立的排序,以及与这些排序列值与记录之间的对应关系的结构。
索引的类型按照组织方式来分主要是聚集索引和非聚集索引两种;
按照数据的唯一性来分,可以分为唯一索引和非唯一索引两种;
按照索引键的列数来分,可以分为单一索引和组合索引两种。
(1)快速存取数据;
(2)保证数据记录的唯一性;
(3)实现表与表之间的参照完整性;
(4)在使用ORDERBY、GROUPBY子句进行数据检索时,利用索引可以减少排序和分组的时间。
缺点:
(1)创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
(2)索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。
(3)当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。
一个聚集索引和若干个非聚集索引。
随着数据库的使用,数据不断发生变化,经过多次的增加、修改和删除等更新操作以后,索引的数据可能会分散在硬盘的各个位置,也可能将本应该存储在同一个页中的索引分散到多个页中,这样就产生了很多索引碎片。
这些碎片与操作系统里的硬盘碎片一样,会影响系统性能。
当碎片增多时,SQLServer的查询速度会明显降低。
所以需要重建索引来整理索引碎片。
方法:
重新组织索引或重新生成索引两种方法。
第8章
习题解答
思考与练习答案:
1(略)2(略)
3、
(1)
USENorthwind
DECLARE@pricemoney
DECLARE@returnstrvarchar(50)
SELECT@price=单价
FROM产品
WHERE产品名称=N'
蕃茄酱'
SET@returnstr=CASE
WHEN@price<
$20THEN'
蕃茄酱的单价低于20元'
WHEN$20<
=@priceand@price<
40THEN'
蕃茄酱的单价在20元与40元之间'
WHEN$40<
=80THEN'
蕃茄酱的单价在40元与80元之间'
ELSE'
蕃茄酱的单价大于80元'
END
PRINT@returnstr
(2)
IF@price<
$20
GOTOprint20--跳转到标签print20
IF$20<
40
GOTOprint40--跳转到标签print40
IF$40<
=80
GOTOprint80--跳转到标签print80
GOTOother--跳转到标签other
print20:
PRINT'
GOTOtheEnd--跳转到标签theEnd
print40:
print80:
other:
theEnd:
4、
DECLARE@execstrvarchar(1000)
DECLARE@yearint
SET@year=2010
WHILE@year>
2001
BEGIN
set@execstr='
SELECT*FROM订单WHEREYEAR(订购日期)='
+CAST(@yearASvarchar(4))--将查询语句放在一个变量中
EXEC(@execstr)--执行变量中的查询语句
--当该年的订单数不为零时将查询出来的记录插入到一个新表中
IF@@ROWCOUNT>
0
--执行括号里的T-SQL语句
EXECUTE('
SELECT*INTO订单_'
+@year
+'
FROM订单WHEREYEAR(订购日期)='
+@year)
SET@year=@year-1
第9章
存储过程是一种数据库对象,是为了实现某个特定任务的一组T-SQL语句和可选控制流语句的预编译集合,这些语句在一个名称下存储并作为一个单元进行处理。
存储过程在第一次执行时进行编译,然后将编译好的代码保存在高速缓存中供以后调用,以提高代码的执行效率。
2.答:
执行触发器的时候,系统会产生两个临时表。
插入表inserted表里存放的是更新前的记录:
对于插入记录操作来说,inserted表里存放的是要插入的数据;
对于更新记录操作来说,inserted表里存放的是要更新的记录。
deleted表里存放的是更新后的记录:
对于更新记录操作来说,deleted表里存放的是更新前的记录(更新完后即被删除);
对于删除记录操作来说,deleted表里存入的是被删除的旧记录。
触发器可以分为两大类:
DML触发器和DDL触发器。
DML(数据操纵语言)触发器是在数据库服务器中发生数据操作语言事件时执行的存储过程。
DML触发器是在执行一个Insert、Update或Delete语句时触发。
DML触发器又分为两类,After触发器和InsteadOf触发器。
DDL(数据定义语言)触发器是在响应数据定义语言事件时执行的存储过程。
DDL触发器一般用于执行数据库中的管理任务,例如审核和规范数据库操作、防止数据库表结构被修改等。
4.
(1)
CREATEPROCEDURESel_grade@snochar(10),@cnochar(3)AS
SELECTgrade
FROMgrade
WHEREs_id=@snoANDc_id=@cno
CREATEPROCEDURESel_Course@sdepnvarchar(10)AS
SELECTsdepartment,c_id,COUNT(*)AS人数
FROMstudent,grade
WHEREsdepartment=@sdepANDstudent.s_id=grade.s_id
GROUPBYsdepartment,c_id
ORDERBYsdepartment
(3)
CREATEPROCEDURESel_Stu@kcnamenvarchar(10)AS
SELECTcname,course.c_id,COUNT(*)AS人数,AVG(grade)AS平均分
FROMcourse,grade
WHEREcname=@kcnameANDcourse.c_id=grade.c_id
GROUPBYcname,course.c_id
(4)
CREATETRIGGERsc_ins_60ONgradeAFTERINSERT
AS
BEGIN
IF(SELECTCOUNT(*)FROMgrade
WHEREc_id=(SELECTc_idFROMinserted))>
60
该课程选课人数已满!
请另选其他课程。
'
ROLLBACK
END
(5)
CREATETRIGGERIns_Up_100ONstudentAFTERINSERT,UPDATE
IF(SELECTCOUNT(*)FROMstudent
WHEREsdepartment=(SELECTsdepartmentFROMinserted))>
100
该系人数已满!
!
ROLLBACK
(6)
CREATETRIGGERDel_s_scONstudentAFTERDELETE
DELETEFROMgrade
WHEREs_idIN(SELECTs_idFROMdeleted)
(7)
CREATETRIGGERDel_databaseONALLSERVER
AFTERDROP_DATABASE
IFEXISTS(SELECTnameFROMsys.databaseWHEREname=N'
stu_info'
)
DROPDATABASE[stu_info]
PRINT'
不允许删除数据库stu_info'
ROLLBACK
第10章
(1)D;
(2);
(3)B
二、填空题
(1)对称加密和非对称加密
(2)数据库、架构和服务器
(3)账户
(4)数据库中预定义的“固定数据库角色”、用户可以创建的“灵活数据库角色”和Public角色
三、简答题
(1)简述安全主体的定义和内容。
一个请求服务器、数据库或架构资源的实体称为安全主体。
每一个安全主体都有唯一的安全标识符(SecurityIdentifier,SID)。
安全主体在3个级别上管理:
Windows、SQLServer和数据库。
安全主体的级别决定了安全主体的影响范围。
(2)对称加密和非对称加密有什么区别。
最常使用的有两种加密方式:
对称加密和非对称加密。
对称加密使用相同的密钥加密和解密数据,使用的算法相对于非对称加密的算法比较简单。
非对称加密使用两个具有数学关系的不同密钥加密和解密数据。
这两密钥分别称为私钥和公钥,它们合称为密钥对。
非对称加密被认为比对称加密更安全,因为数据的加密密钥与解密密钥不同。
(3)Windows身份和混合安全身份两种验证模式有何区别、联系。
当使用Windows身份验证连接到SQLServer时,Windows将完全负责对客户端进行身份验证。
在这种情况下,将按其Windows用户账户来识别客户端。
当用户通过Windows用户账户进行连接时,SQLServer使用Windows操作系统中的信息验证账户名和密码。
使用混合安全模式时,SQLServer2008首先确定用户的连接是否使用有效的SQLServer用户账户登录。
如果是用户有有效的登录和正确的密码,则接受用户的连接;
如果用户有效的登录,但是使用了不正确的密码,则用户的连接被拒绝。
仅当用户没有有效的登录时,SQLServer2008才检查Windows账户的信息。
在这样的情况下,SQLServer2008确定Windows账户是否有连接到服务器的权限。
如果账户有权限,连接被接受;
否则,连接被拒绝。
(4)服务器角色包括哪些内容。
服务器级角色的权限作用域为服务器范围,包括sysadmin、serveradmin、securityadmin、processadmin、setupadmin、bulkadmin、diskadmin、dbcreator和public等角色。
(5)在数据库中默认的数据库用户有哪些。
默认的数据库用户有:
dbo用户、guest用户和sys用户等
(6)在SQLServer实现透明数据加密,需要的步骤有哪些。
需要的步骤如下:
(a)建立主要密钥;
(b)建立或取得受到主要密钥保护的凭证,也称作证书;
(c)建立数据库加密密钥,并使用证书保护它;
(d)设定数据库使用加密。
第11章
1.简述SQLServer2008中的数据导入导出概念。
MicrosoftSQLServer允许在SQLServer表和数据文件之间大容量导入和导出大容量数据,这对在SQLServer和异类数据源之间有效传输数据是非常重要的。
“大容量导出”是指将数据从SQLServer表导出到数据文件,“大容量导入”是指将数据从数据文件加载到SQLServer表。
例如,您可以将数据从MicrosoftExcel应用程序导出到数据文件,然后将这些数据大容量导入到SQLServer表中。
2.简述SQLServer2008中可以使用的数据导入导出方法有哪些?
数据导入导出功能,有使用Transact-SQL方式、图形界面方式、BCP命令和在SQL语句中执行xp_cmdshell方式等。
第12章
12.1解释下列术语:
并发操作:
多个用户或应用程序可能同时对数据库的同一数据对象进行读写操作,这种现象称为对数据库的并发操作。
事务:
事务是作为单个逻辑工作单元执行的一系列操作。
一个逻辑工作单元必须有四个属性,即原子性、一致性、隔离性和持久性,简称ACID属性,只有这样才能成为一个事务。
数据库一致性状态:
是指数据库中只包含成功事务提交的结果的状态。
封锁:
封锁是使事务对它要操作的数据有一定的控制能力。
封锁具有3个环节:
第一个环节是申请加锁,即事务在操作前要对它欲使用的数据提出加锁请求;
第二个环节是获得锁,即当条件成熟时,系统允许事务对数据加锁,从而事务获得数据的控制权;
第三个环节是释放锁,即完成操作后事务放弃数据的控制权。
排它锁:
排它锁也称为独占锁或写锁。
一旦事务T对数据对象A加上排它锁(X锁),则只允许T读取和修改A,其它任何事务既不能读取和修改A,也不能再对A加任何类型的锁,直到T释放A上的锁为止。
共享锁:
共享锁又称读锁。
如果事务T对数据对象A加上共享锁(S锁),其它事务对A只能再加S锁,不能加X锁,直到事务T释放A上的S锁为止。
活锁:
如果事务T1封锁了数据R,T2事务又请求封锁R,于是T2等待。
T3也请求封锁R,当T1释放了R上的封锁之后系统首先批准了T3的要求,T2仍然等待。
然后T4又请求封锁R,当T3释放