《关系数据库与SQL_Server_2005课后答案——修改版》

《关系数据库与SQL_Server_2005课后答案——修改版》
《关系数据库与SQL_Server_2005课后答案——修改版》

关系数据库与SQL Server 2005

习题参考答案(修改版)

第1章关系数据库原理

1.数据是数据库中存储的基本对象。数据库是长期存储在计算机内、有组织的、可共享的数据集合。数据库管理系统是位于用户与操作系统之间的一层数据管理软件。数据库系统是指在计算机系统中引入数据库后的系统构成,一般由数据库、数据库管理系统(及开发工具)、应用系统、数据库管理员和用户构成。

2.数据库系统的特点有:数据结构化、数据的共享性高,冗余度低,易扩充、数据独立性高、数据由DBMS统一管理和控制。

3.数据库管理系统的主要功能有:数据定义功能、数据操纵功能、数据库的运行管理、数据库的建立和维护功能。

4.

1:1的E-R图

1:m的E-R图

m:n的E-R图

5.

6.

公司(公司代码,公司名,地址)

部门(部门代码,部门名)

员工(员工代码,姓名,性别,年龄,职务)

商品(商品代码,商品名,单价,数量)

厂家(厂家代码,厂家名,地址)

拥有(公司代码,部门代码)

属于(部门代码,员工代码)

销售(员工代码,商品代码,销售量)

供货(商品代码,厂家代码)

7.条件连接是把两个表中的行按照给定的条件进行拼接而形成的新表,结

果列为参与连接的两个表的所有列。自然连接要求两个表有共同属性(列)。自然连接的结果表是参与操作的两个表的共同属性上进行等值条件连接后,再去除重复的属性后得到的新表。

8.

9.关系的完整性规则包括实体完整性、域完整性和参照完整性三个方面。实体完整性用于保证数据库表中的每一个元组都是惟一的,要求在任何关系的任何一个元组中,主键的值不能为空值、也不能取重复的值。域完整性用于保证给定字段中数据的有效性,即保证数据的取值在有效的范围内,要求由用户根据实际情况,定义表中属性的取值范围。参照完整性用于确保相关联的表间的数据保持一致,要求“不引用不存在的实体”,即:不允许在一个关系中引用另一个关系中不存在的元组。

例如:主表:学生(学号,姓名,性别,专业号,年龄)

从表:专业(专业号,专业名)

主表的“专业号(外键)”的取值只能为两种情况:若取非空值,则它必须是从表中存在的值;取空值(null),表明尚未给学生分配专业,null不等于0或空字符串。

10.在关系数据库的设计过程中,对于同一个问题,选用不同的关系模式,其性能的优劣是大不相同的,为了区分关系模式的优劣,人们常常把关系模式分为各种不同等级的范式。一个低一级范式的关系模式,通过分解可以转换为若干个高一级范式的关系模式,这种过程称为关系的规范化。

关系的规范化主要目的是解决数据库中数据冗余、插入异常、删除异常和更新异常等数据存储问题。

关系规范化的基本方法是逐步消除关系模式中不合适的数据依赖,使模式达到某种程度的分离,也就是说,不要将若干事物混在一起,而要彼此分开,用一个关系表示一事或一物。

从第一范式到第二范式,消除了非主属性对码的部分函数依赖;从第二范式到第三范式,消除了非主属性对码的传递函数依赖;从第三范式到BCNF,消除了关系中冗余的码。

习题2

1.微软公司为用户提供了5种版本的SQL Server 2005:简易版、工作组版、标准版、企业版、开发人员版。

2.SQL Server 2005的新特性:企业级数据管理的增强功能、提高开发者能力的新技术、查询通知、多活动结果集、依据镜像的透明故障转移、商务智能。

3.SQL Server 2005的配置工具包括:Notification Services命令提示、Reporting Services配置、SQL Server Configuration Manager、SQL Server错误和使用情况报告、SQL Server外围应用配置器。

4.SQL Server 2005安装完成后,包括以下的系统数据库:Master数据库、Model数据库、Msdb数据库、Tempdb数据库、Resource数据库。

习题3

一、填空题

1.Master数据库Model数据库Msdb数据库Tempdb数据库Resource 数据库

2.主数据文件次数据文件事务日志文件

3.可恢复所有未完成的事务,保证数据库操作的一致性和完整性

4.CREATE DA TABASE

5.ALTER DATABASE

6.DROP DATABASE

7.sp_helpdb

8.数据数据

9.为空删除文件组中的文件

10.主

二、简答题

1.分离数据库时,如果有用户与数据库连接,在“状态”列显示“未就绪”,此时分离数据库会操作失败。所以要分离数据库先要结束那些正在使用数据库的进程。

2.备份数据库有4种类型:完整备份、差异备份、事务日志备份、文件和文件组备份。

三、上机题

create database testdb

on primary

( name=td1, filename=‘e:\sql\td1.mdf',

size=5, maxsize=20, filegrowth=10% ),

( n ame=td2, filename=‘e:\sql\td2.ndf',

size=10, maxsize=30, filegrowth=2 ),

filegroup user1

( name=td3, filename=‘e:\sql\td3.ndf',

size=5, maxsize=unlimited, filegrowth=2 )

log on

( name=tlog, filename=' e:\sql\tlog.ldf',

size=4, maxsize=unlimited, filegrowth=20% )

习题4

一、填空题

1.主键约束唯一性约束外键约束检查约束空值约束默认值约束2.单个列定义所有列定义修改该表的方式

3.一多空非空

4.相应的约束

5.外键T2

二、上机题

1.

alter table 学生表

add constraint pk_xh primary key (学号),

constraint uq_email unique (EMAIL),

constraint df_xb default ‘男’ for 性别

alter table 学生表

alter column 姓名char(8) not null

2.

alter table 成绩表

add constraint pk_xh_kcm primary key (学号, 课程名),

constraint fk_xh foreign key (学号) references 学生表(学号),

constraint ck_cj check (成绩>=0 and 成绩<=100)

alter table 成绩表

alter column 课程名char(20) not null

3.

insert 学生表(学号, 姓名, 性别, 电话, EMAIL)

values (‘020107’, ‘田芳’, ‘女’, ‘65926699’, ‘tianfang@https://www.360docs.net/doc/4711280868.html,’)

go

insert 成绩表(学号, 课程名, 成绩)

values (‘020107’, ‘数据库基础’, 85)

4.

alter table 学生表

add 序号int identity

5.

alter table 学生表

alter column 电话char(11)

6.

exec s p_rename ‘学生表’, ‘xs b’

go

exec s p_rename ‘成绩表’, ‘cjb’

7.(略)

习题5

一、填空题

1.SELECT

2.WHERE

3.连接

4.分组

5.排序

6.ORDER BY

7.设定组或聚合的查询条件HAVING子句可以使用汇总函数,而WHERE 子句则不能

二、上机题

1.

select 课程名, 授课教师, 开课学期

from kc

where 开课学期=2

2.

select 姓名, 性别, 联系电话

from xsqk

where 性别=0

3.

select 学号, 课程号, 成绩

from xs_kc

where 成绩>=80

4.

select 学号, 课程号, 成绩

from xs_kc

where 成绩>=80 or 成绩<60

5.

select 学号, 姓名, 出生日期

from xsqk

where 出生日期not between ‘1980-07-07’ and ‘1980-09-30’6.

select *

from xsqk

where 姓名like ‘陈_’

7.

select *

from xsqk

where 学号like ‘%1%’

8.

select *

from xsqk

where 联系电话like ‘_ _ _ _ _ _ [46] _’

9.

select *

from kc

where 开课学期in (1, 3, 5)

10.

select 学号, 姓名, 出生日期

from xsqk

order by 出生日期

11.

select 开课学期, sum(学分) as 各学期的学分合计

from kc

group by 开课学期

12.

select 学号, count(*) as 每个学生选修的课程门数

from xs_kc

group by 学号

13.

select 课程名称, 开课学期, 学分

from kc

compute sum(学分)

14.

select 课程名称, 开课学期, 学分

from kc

order by 2

compute sum(学分) by 开课学期

15.

select 学号, avg(成绩) as 学生的平均分

from xs_kc

group by 学号

16.

select 学号, avg(成绩) as 学生的平均分

from xs_kc

group by 学号

having avg(成绩) between 70 and 80

17.

select 学号, 课程号, 成绩

into temp_kc

from xs_kc

order by 课程号, 成绩desc

18.

select max(成绩) as 101课程的最高分, min(成绩) as 101课程的最低分from xs_kc

where 课程号=’101’

19.

select 开课学期, count(*) as 每学期开设的课程门数

from kc

group by 开课学期

20.

select 专业名, count(专业名) as 各专业人数

from xsqk

group by 专业名

21.

select 学号, xs_kc.课程号, 授课教师, 开课学期, 成绩

from kc, xs_kc

where kc.学号=xs_kc.学号and 成绩<60

22.

select 学号, sum(成绩) as 各学生的总分

from xs_kc

group by 学号

having sum(成绩)>=100

order by sum(成绩) desc

23.

select 学号, 姓名

from xsqk

where (select count(课程号)

from xs_kc

where xsqk.学号=xs_kc.学号and 成绩>=60 )=2

24.

select *

from xs_kc a

where 成绩=(select max(成绩)

from xs_kc b

where a.课程号=b.课程号)

25.

select *

from xs_kc a

where 成绩=(select min(成绩)

from xs_kc b

where a.学号=b.学号)

习题6

一、填空题

1.标准视图索引视图分区视图

2.虚拟表CREATE VIEW

3.基表

4.聚集索引非聚集索引唯一索引复合索引全文索引XML索引5.创建表

6.数据库

二、操作题

1.

create view v_平均成绩

as

select 学号,avg(成绩) as 平均成绩from xs_kc

group by 学号

having avg(成绩)>=90

2.

create view v_选课信息

as

select a.姓名,b.课程名from xsqk a,kc b,xs_kc c

where a.学号=c.学号and b.课程号=c.课程号and a.班级='网络071'

3.

create index ix_课程名

on kc(课程名)

习题7

1.规则是绑定到列或用户自定义数据类型上的数据库对象,用来指定列可以接受哪些数据值。规则是实现域完整性的方法之一。

CHECK约束是用CREATE TABLE语句在建表时指定的,而规则需要作为单独的数据库对象来实现。在1列上只能使用1个规则,但可以使用多个CHECK 约束。1个规则可以应用于多个列,还可以应用于用户自定义的数据类型,而CHECK约束只能应用于它所定义的列。

2.使用规则来实现数据完整性,需要两个步骤。一是创建规则;二是将规

则绑定到列或用户自定义数据类型上。

3.默认值就是当用户向表中添加数据时,没有明确地给出,而由SQL Server 自动指派的值。默认值可以定义为数据库对象,使用时需将其绑定到特定的列上。

默认值约束是用CREATE TABLE语句创建表时,使用DEFAULT子句为表中的列提供默认值。默认值对象是用CREA TE DEFAULT语句来创建的,使用时须将它绑定到列或用户自定义数据类型上。

4.使用默认值来实现数据完整性,需要两个步骤。一是创建默认值对象;二是将默认值对象绑定到列或用户自定义数据类型上。

习题8

一、选择题

1.C

2.B

3.D

二、填空题

1.一条或多条T-SQL语句的集合GO

2.DECLARE 系统

3.语句块

4.退出重新开始

5.某一时刻一段时间间隔

三、简述题

1.SQL标识符的命名必须遵守以下规则:标识符的长度可以为1~128个字符。标识符的第一个字符必须是英文字母、汉字、下划线、@或者#。默认情况下,标识符内不允许含有空格,也不允许将SQL关键字作为用户定义的标识符。

2.T-SQL的运算符共有7类:算数运算符、赋值运算符、按位运算符、比较运算符、逻辑运算符、字符串串联运算符、一元运算符。

3.局部变量的声明:DECLARE @variable_name datatype [ ,…n ]局部变量的赋值:①SET @variable_name = expression

②SELECT @variable_name = expression [ ,…n ]

[ FROM… ]

[ WHERE… ]

4.全局变量是指由系统提供且预先声明的变量,不能显示地被赋值,通过在名称前保留两个@@符号区别于局部变量。全局变量在相应的上下文中是随时可用的,通常被服务器用来跟踪服务器范围和特定会话期间的信息。

5.RETURN语句用于从查询或过程中无条件退出。RETURN的执行是即时且完全的,可在任何时候用于从过程、批处理或语句块中退出,在它之后的语句不会被执行。

四、编程题

1.

use xscj

go

declare @n int

select @n=count(*) from xsqk where datediff(yy,出生日期,getdate())>25

if @n>=0

print '年龄大于21的学生人数有:'+cast(@n as varchar(5))

else

print '没有年龄大于21的学生'

2.

declare @i int, @sum int

select @i = 1, @sum = 0

while ( @i <= 100 )

begin

select @sum = @sum + @i , @i = @i +1

if (@sum > 1000) break

end

print 'n=' + cast(@i as varchar(5)) + ',sum=' + cast(@sum as varchar(10)) 3.

waitfor delay ’00:00:06’use xscj

select * from xsqk

go

waitfor time ’16:15:30’use xscj

select * from xs_kc

习题9

一、填空题

1.参数输入输出

2.EXECUTE

3.不能

4.DML触发器DDL触发器

5.FOR | AFTER INSTEAD OF

6.Inserted Deleted

7.INSERT UPDATE DELETE

二、编程题

1.

use xscj

go

create procedure p_ins

@kch char(3), @kcm char(20),@teacher char(8),@kcxq tinyint,@xs tinyint, @xf tinyint

as

insert into kc values(@kch,@kcm,@teacher,@kcxq,@xs,@xf) go

exec p_ins '111','数据库基础','张玲',2,68,4

2.

create procedure p_xsqk

@xh char(6),@name char(8) output,@xb bit output,@xi char(10) output,@zy char(10) output

as

select @name=姓名,@xb=性别,@xi=所在系,@zy=专业名

from xsqk

where 学号=@xh

go

declare @xh char(6),@name char(8) ,@xb bit ,@xi char(10) ,@zy char(10)

select @xh='020101'

exec p_xsqk @xh,@name output,@xb output,@xi output,@zy output

print ' 学号为'+@xh+'的信息如下:'

print ''

print ' 姓名: '+@name

print ' 性别: '+convert(varchar(2),@xb)

print ' 所在系: '+@xi

print ' 专业名: '+@zy

3.

create proc p_update @kch char(3)

as

update xs_kc set 成绩=60 where 课程号=@kch and (成绩>=55 and 成绩<=59)

go

declare @kch char(3)

select @kch='103'

exec p_update @kch

select * from xs_kc where 课程号=@kch

4.

create proc p_update

@kch char(3)

as

update xs_kc set 成绩=60 where 课程号=@kch and (成绩>=55 and 成绩<=59)

go

declare @kch char(3)

EXEC proc_课程号

select @kch='103'

exec p_update @kch

select * from xs_kc where 课程号=@kch

EXEC sp_help up_update_kc

EXEC sp_helptrigger kc

EXEC sp_depends kc

5.

CREATE PROCEDURE proc_阶乘1

@N INT,@Y INT OUTPUT

AS

DECLARE @X INT,@T INT

SELECT @X=1,@T=1,@Y=0

WHILE @X<=@N

BEGIN

SELECT @T=@T*@X

SELECT @X=@X+1

SET @Y=@Y+@T

END

DECLARE @Y INT

EXEC proc_阶乘1 6,@Y OUTPUT

PRINT @Y

6.

create trigger up_updatekc

on kc for update

as

update xs_kc

set 课程号= inserted.课程号

where 课程号= deleted.课程号

7.

create trigger t_delete_xsqk on xsqk for delete

as

declare @学号char(6)

select @学号=deleted.学号from deleted

print '准备删除xs_kc表的'+@学号+'成绩记录'

delete xs_kc where 学号=@学号

print '已经删除xs_kc表的'+@学号+'成绩记录'

8.

create trigger tr_insert_kc on kc after insert

as

if update(课程号)

print '成功在kc表中插入了上述一个记录'

go

insert into kc values('301','数据库','高老师' ,5, 114 ,6)

9.

create trigger tri_update_kc_授课教师和开课学期on kc for update

as

if update(授课教师) and update(开课学期)

begin

declare @课程名char(20)

select @课程名=inserted.课程名from deleted ,inserted

where deleted.课程名=inserted.课程名

print @课程名+'课程的授课教师和开课学期已经被更新'

end

习题10

1.SQL Server 2005有两种身份验证模式。Windows身份验证:使用Windows 操作系统本身提供的安全机制验证用户的身份,只要用户能够通过Windows的用户帐户验证,就可连接到SQL Server,又称为“信任连接”模式。SQL Server 验证:使用SQL Server验证时,必须提供连接到SQL Server上的登录帐号和口令(该帐号和口令由系统管理员事先创建并存储在SQL Server中)。

2.登录:服务器方的一个实体,使用一个登录名只能进入服务器,但是不能让用户访问服务器中的数据库资源。每个登录名的定义存放在master数据库的syslogins表中。

用户:一个或多个登录对象在数据库中的映射,可以对用户对象进行授权,以便为登录对象提供对数据库的访问权限。用户定义信息存放在每个数据库的sysusers表中。

一个登录名可以被授权访问多个数据库,但一个登录名在每个数据库中只能映射一次。即一个登录可对应多个用户,一个用户也可以被多个登录使用。如果没有为一个登录指定数据库用户,则登录时系统将试图将该登录名映射成guest 用户(如果当前的数据库中有guest用户的话)。如果还是失败的话,这个用户将无法访问数据库。

3.SQL Server代理可以完成的工作有以下4种:作业调度、执行作业、产生警报、通知管理员。

4.(略)

习题11

1.CLR,运行阶段通用语言,是一种管理代码执行情况的环境。

MSIL,微软中间语言,这种语言以简写方式表示所有代码。

Metadata,元数据,它们是关于应用程序的描述性信息,指出应用程序能做什么,归属于哪里等。

相关主题
相关文档
最新文档