数据库实训sqlserver

该文详细描述了如何创建一个名为library的数据库,包括设置数据文件和日志文件的路径,以及创建书籍表、读者表和借阅表。接着,进行了数据插入,并为读者表创建了非聚集索引,以及创建了一个显示借阅信息的视图。此外,还提供了查询设计题和填空题,涉及读者信息查询、特定条件的图书和作者查询、借阅记录查询等。最后,创建了还书存储过程并给出借书触发器的示例。

一、数据库设计题

1、以“library”为名称创建一个数据库。该数据库中包含一个主数据文件tsdata.mdf,存放路径为“d:\data\”;一个事务日志文件tslog.ldf,存放路径为“d:\data\”。其他设置自定。

 2、在上题创建好的数据库中,按如下要求创建三张表。

表1 书籍表:用来存储书籍的基本信息

字段名称

数据类型

长度

是否为空

说明

序号

int

非空

初始值和增量均为1

图书编号

char

10

非空

主键

书名

varchar

50

非空

作者

varchar

20

非空

价格

Money

出版社

varchar

50

非空

出版日期

smalldatetime

库存量

int

非空

>=0

 

表2读者表:用来存储读者的基本信息

字段名称

数据类型

长度

是否为空

约束

借书证号

char

10

非空

主键

姓名

varchar

20

非空

性别

char

2

非空

默认值为“男”

单位

 varchar

50

联系电话

char

11

表3 借阅表:存储读者借阅的信息

字段名称

数据类型

长度

是否为空

约束

图书编号

char

10

非空

外键,参照书籍表

借书证号

char

10

非空

外键,参照读者表

借书日期

smalldatetime

非空

还书日期

smalldatetime

归还否

char

2

非空

3、在“library”数据库中插入以下记录。

(1)在书籍表中插入以下数据:

图书编号

书名

作者

价格

出版社

出版日期

库存量

J1

计算机基础

刘大石

29

机械工业出版社

2014/2/1

5

J2

数据库应用教程

李刚

32

电子工业出版社

2014/9/1

8

(2)在读者表中插入以下数据:

借书证号

姓名

性别

单位

联系电话

10001

柯思扬

信息系

13837482123

10002

孙一明

管理系

13978621278

(3)在借阅表中插入以下数据:

图书编号

借书证号

借书日期

还书日期

归还否

J1

10001

2015/6/3

2015/12/3

J2

10001

2015/6/3

2015/12/3

 

 

 4、为读者表创建一个“姓名”列的非聚集索引文件。

 5、创建“读者借阅信息”视图,包括借书证号、姓名、书名、还书日期等信息。

 

二、查询设计题(每小题5分,共25分)

1、在library数据库中查询“孙一明”的相关信息。

请粘贴T-SQL查询语句:

select * from 读者表 where 姓名='孙一明';

2、查询信息系或电子系的读者信息。

请粘贴T-SQL查询语句:

select * from 读者表 where 单位='信息系' or 单位='电子系';

3、查找书名以“计算机”打头的所有图书和作者。

请粘贴T-SQL查询语句:

select * from 书籍表 where 书名 like '计算机%';

4、查找姓名为“柯思扬”借阅书本的书名。  

请粘贴T-SQL查询语句:

select 书名 from 书籍表 where 图书编号 in

(select 图书编号 from 借阅表 where 借书证号 =

(select 借书证号 from 读者表 where 姓名='柯思扬'))

5、查询借书证号为“10001”所借书本的本数,显示借书证号和借书本数,并按借书证号升序排序。(4分)

请粘贴T-SQL查询语句:

select  b.借书证号,COUNT(*) 借书本数 from 借阅表 b,书籍表 a

where a.图书编号=b.图书编号 and b.借书证号='10001' group by b.借书证号 order by b.借书证号;

三、填空题(每空2分,共10分)

1、读者还书存储过程:ReturnBook的创建,若读者没有借阅此书,则显示‘对不起,你没有借阅此书,故而无法进行此次还书操作,请核实!’信息。

use Library

go

create  procedure ___ReturnBook___

@no char(10),@bid char(10)

as

if not exists(___select * from 借阅表where 借书证号=@no and 图书编号=@bid______________________________________________________)

begin

       print'对不起,你没有借阅此书,故而无法进行此次还书操作,请核实!'

end

 

2、在借阅表中创建一个触发器:tri_Book,若要借的书已无库存,则无法进行借书操作,即无法在‘借阅表’中插入记录。

create ____trigger_____ tri_Book ________

on _____借阅表_______

for  insert

as

declare @btotal varchar(10),@bborrowed varchar(10)

select  @bborrowed=图书编号  from inserted

select @btotal=库存量 from 书籍表 where 图书编号=@bborrowed

if(___@btotao=0___________)

begin

rollback transaction

print '借阅失败!'

print'对不起,此书已经没有库存,无法进行本次借书操作!'

end

go

四、程序题(共15分)

1、读者还书存储过程:ReturnBook_1的创建,1.成功还书时将归还否字段的‘否’改成‘是’,还书日期为当前时间,3.显示“成功地向图书馆归还!”。

create procedure ReturnBook_1

@no varchar(10),@bid varchar(30)

as

if exists(select *  from 借阅表 where 借书证号=@no and 图书编号=@bid and 归还否='')

begin

update 借阅表 set 归还否='',借书日期=GETDATE()

where 借书证号=@no and 图书编号=@bid

select '成功地向图书馆归还!'

end

go

2、用借书证号和图书编号为“10001”和“j1” 来验证存储过程。  

exec ReturnBook_1 '10001','J1'

select * from 借阅表;

-- 5、查询借书证号为“10001”所借书本的本数,
-- 显示借书证号和借书本数,并按借书证号升序排序。

select  b.借书证号,COUNT(*) 借书本数 from 借阅表 b,书籍表 a
where a.图书编号=b.图书编号 and b.借书证号='10001' group by b.借书证号 order by b.借书证号;

select * from 书籍表
select * from 读者表
select * from 借阅表


-- 1、读者还书存储过程:ReturnBook_1的创建,1.成功还书时将归还否字段的‘否’改成‘是’,还书日期为当前时间,3.显示“成功地向图书馆归还!”。
create procedure xxx
@no varchar(10),@bid varchar(30)
as
if exists(select * from 借阅表 where 借书证号=@no and 图书编号=@bid and 归还否='否')
begin
update 借阅表 set 归还否='是',还书日期=GETDATE()
select '成功地向图书馆还书!'
end
go

-- 读者还书
exec xxx '10001','J2'
select* from 借阅表

-- 1、读者借书触发器
create trigger borrowbok2
on 借阅表
for insert
as
declare @total varchar(10),@borrow varchar(10)
select @borrow=图书编号 from 借阅表
select @total=库存量 from 书籍表 where 图书编号=@borrow
if(@total>0)
begin
update 书籍表 set 库存量=库存量-1
print'借书成功'
end
go


insert into 借阅表(图书编号,借书证号,借书日期,还书日期,归还否)
values('J1',10002,2022-12-12,2022-12-13,'否')

select* from 书籍表
select * from 借阅表
-- 在借阅表中创建一个触发器:tri_Book,若要借的书已无库存,则无法进行借书操作,即无法在‘借阅表’中插入记录
create trigger tri_Book
on 借阅表
for  insert 
as
declare @btotal varchar(10),@bborrowed varchar(10)
select  @bborrowed=图书编号  from 借阅表
select @btotal=库存量 from 书籍表 where 图书编号=@bborrowed
if(@btotal=0)
begin
rollback transaction
print '借阅失败!'
print'对不起,此书已经没有库存,无法进行本次借书操作!'
end
go

insert into 借阅表(图书编号,借书证号,借书日期,还书日期,归还否)
values('J3',10001,2022-12-12,2022-12-13,'否')


use Library
go
create  procedure ReturnBook
@no char(10),@bid char(10)
as
if not exists(select * from 借阅表 where 借书证号=@no and 图书编号=@bid)
begin
    print'对不起,你没有借阅此书,故而无法进行此次还书操作,请核实!'
end

exec ReturnBook '10002','J1'
select* from 借阅表

create procedure ReturnBook_11
@no char(10),@bid char(10)
as
if not exists(select * from 借阅表 where @no=借书证号 and @bid=图书编号)
begin
    print'你没有借到这本书,无法归还'
end

exec ReturnBook_11 '10001','J3'
select * from 借阅表

数据库课程设计 目录 1. 设计目的(需求分析) 2. 设计内容(概念结构设计) 3. E——R图设计(概念结构设计) 4. 设计过程(逻辑结构设计) 5. 数据库实施阶段 6. 数据库运行和维护阶段 七、总结 数据库设计就是通过设计反映现实世界信息需求的概念数据模型,并将其转成逻辑模型 和物理模型,最终建立为现实世界服务的数据库。 1. 设计目的(需求分析) 1. 图书信息管理 完成图书的录入、修改、删除和查询功能。在查询图书信息时,可以随时查询书库中现 有书籍的类型、书号、作者、单价等。可随时查询书籍借还情况。包括借书人单位、姓 名、借书证号、借书日期和还书日期。任何人可借多种书,任何一种书可为多个人所借 ,借书证号具有唯一性。 2. 未来方便业务往来,需保存出版社先关信息。这些信息包括出版社编号、名称、 电话、邮编、地址等。 2. 设计内容(概念结构设计) 1. 图书信息,编号、名称、价格、出版社、库存量 2. 读者信息,借书证编号、读者名称、登记日期、有效期 3. 借阅信息,借阅编号,图书编号,读者编号,借阅日期,应还日期 三、E----R图设计(概念结构设计) 图书信息ER图 借阅信息ER图 读者信息ER图 将局部ER图合并、转换成全局ER图,完成概念模型的设计 全局ER图 四、设计过程(逻辑结构设计) 1、图书信息数据表 "字段名称 "数据类型 "是否关键字 " "图书编号 "文本 "是 " "出版社 "文本 "否 " "作者 "文本 "否 " "价格 "数字 "否 " "库存量 "数字 "否 " 2、借阅信息数据表 "字段名称 "数据类型 "是否关键字 " "借阅编号 "文本 "是 " "图书编号 "文本 "否 " "读者编号 "文本 "否 " "借书日期 "日期时间 "否 " "还书日期 "日期时间 "否 " "借阅次数 "数字 "否 " 3、读者信息数据表 "字段名称 "数据类型 "是否关键字 " "读者编号 "文本 "是 " "读者姓名 "文本 "否 " "登记日期 "时间日期 "否 " "有效期 "时间日期 "否 " 五、编码 create schema fjm create table fjm.借阅信息 (图书编号 tinyint primary key, 借阅编号 char(10), 读者编号 char(14), 借书日期 char(14), 还书日期 char(14), ) create table fjm.图书信息 (图书编号 char(10) primary key, 图书名称 tinyint not null foreign key references fjm.借阅信息(图书编号), 库存量 char(8), 作者 char(20), 出版社名称 char(24), ) create table fjm.读者信息 (借书证号 tinyint not null foreign key references fjm.借阅信息(图书编号), 读者姓名 char(16), 读者编号 char(10) ) 六、总结 通过这次对图书管理系统的设计,我对sql软件有了进一步的了解。在这次的课程设计事 件中,让我受益匪浅,我上网查看了大量的资料,到图书馆查阅了相关书籍才摸索到一 点思绪。 在课程设计过程中不但能将知识与实践结合,也培养了我的独立思考能力,增加了 我对书本更深一步的了解。 同时我也发现了自身的缺点,没能更好得运用到书本的知识,遇到问题还是要查阅 书籍,我想我以后可以做到更好的。 ----------------------- 数据库sql图书管理系统全文共8页,当前为第1页。 数据库sql图书管理系统全文共8页,当前为第2页。 作者 出版社 图书编号 库存量 价格 图书信息 数据库sql图书管理系统全文共8页,当前为第3页。 借阅编号 读者编号 图书编号 借阅信息 状态 借书日期 还书时间 借阅次数 读者身份证 读者编号 读者姓名 有效期 读者信息 登记日期 数据库sql图书管理系统全文共8页,当前为第4页。 参照 借阅信息 读者信息 读者编号 读者姓名 登记日期 有效期 读者身份证 借阅次数 应还时间 读者编号 图书编号 库存量 图书编号 出版社 作者 价格 借阅编号 借书日期 图书信息 参考 数据库sql图书管理系统全文共8页,当前为第5页。 数据库sql图书管理系统全文共8页,当前为第6页。 数据库sql图书管理系统全文共8页,当前为第7页。 数据库sql图书管理系统全文共8页,当前为第8页。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值