学生姓名: * * * 学 号: ********** 专业年级: 计算机科学与技术10级 指导教师: * * *
目录
一、结构设计 ................................................................................................................................... 3
1、逻辑结构设计 ..................................................................................................................... 3 2、 关系图 ............................................................................................................................... 5 3、物理结构设计 ..................................................................................................................... 6 4、 关系模式 ........................................................................................................................... 7 二、存储过程 ................................................................................................................................... 8 三、触发器....................................................................................................................................... 9 四、视图脚本 ................................................................................................................................. 12 五、数据库恢复与备份 ................................................................................................................. 12
数据库设计说明书
一、结构设计
1、逻辑结构设计
(1)总体E-R图如图1
图1
读者E-R图如图2
图2
图书E-R图如图3
图3
权限设置E-R图如图4
图4
权限设置E-R图如图5
图5
权限设置E-R图如图6
图6
2、关系图
关系图如图7
图7
3、物理结构设计
Tb_reader读者表:
属性名 readerid rname sex grade Profession ifeffective email 类型 Varchar(10) Varchar(20) Varchar(2) Varchar(1) Varchar(20) tinyint Varchar(20) 备注 主键 不允许空 不允许空(‘男’ or’ 女’) 不允许空 不允许空 不允许空(1 of 0) 允许空 说明 读者id 姓名 性别 年级 专业 是否有效 邮箱 Tb_manager管理员表:
属性名 managerid loginnane password Tb_borrow借阅表:
属性名 borrowid bookid readerid managerid borrowTime backTime 类型 int Varchar(10) Varchar(10) Varchar(10) Smalldatetime Smalldatetime 备注 主键(自增) 不允许空 不允许空 不允许空 不允许空 允许空(backTime>=borrowtime) 类型 Varchar(10) Varchar(20) Varchar(20) 备注 主键 不允许空 不允许空 说明 管理员id 登录名 密码 说明 id 书号 读者号 管理员号 借书时间 还书时间 ifreborrow Tb_book图书表:
属性名 tinyint 不允许空(1 or 0) 是否续借 类型 备注 说明 bookid bname type author price publish quantity remain Varchar(10) Varchar(20) Varchar(20) Varchar(20) float Varchar(20) Tinyint Tinyint 主键 不允许空 允许空 允许空 允许空 允许空 不允许空 不允许空(remain<=quantity) 书号 书名 类型 作者 价格 出版社 总数 剩余 Tb_punishment超期处罚表:
属性名 punishmentid readerid bookid days bmoney 类型 int Varchar(10) Varchar(10) smallint float 备注 主键(自增) 不允许空 不允许空 不允许空 不允许空 说明 id 读者号 书号 超期天数 罚款金额 Tb_purview管理员权限设置表:
属性名 managerid systemset readerset bookset borrowback systemquery 类型 Varchar(10) tinyint tinyint tinyint tinyint tinyint 备注 主键 不允许空(1 or 0) 不允许空(1 or 0) 不允许空(1 or 0) 不允许空(1 or 0) 不允许空(1 or 0) 说明 管理员号 系统设置权限 读者权限 图书管理权限 图书借还权限 系统查询权限 4、关系模式
Tb_reader(readerid,rname,sex,grade,profession,email,ifeffective) Tb_borrow(borrowid,readerid,bookid,managerid,borrowTime,backTime,ifreborrow)
Tb_manager(managerid,loginname,password)
Tb_book(bookid,bname,type,author,publish,price,quantity,remain) Tb_punishment(punishmentid,readerid,bookid,days,bmoney)
Tb_purview(managerid,systemset,readerset,bookset,borrowback,systemquery)
二、存储过程
创建存储过程,输入读者id查询出书名、借阅时间、归还时间、管理员id、是否续借情况
create procedure p
@readerid_in varchar(10), @bookid_in varchar(10),
@bname_out varchar(20) output, @borrowTime_out datetime output, @backTime_out datetime output, @managerid_out varchar(10) output, @ifreborrow_out tinyint output as select
@bname_out=bname,@borrowTime_out=borrowTime,@backTime_out=backTime,@managerid_out=managerid,@ifreborrow_out=ifreborrow
from tb_book,tb_borrow
where tb_borrow.readerid=@readerid_in and tb_borrow.bookid=@bookid_in and tb_book.bookid=tb_borrow.bookid 存储过程使用
declare @readerid_in varchar(10),
@bookid_in varchar(10), @bname_out varchar(20), @borrowTime_out datetime,
@backTime_out datetime, @managerid_out varchar(10), @ifreborrow_out tinyint
select @readerid_in='2010508033' select @bookid_in='005'
exec p @readerid_in,@bookid_in,@bname_out output,@borrowTime_out output,@backTime_out
output,@managerid_out output,@ifreborrow_out output print '书名:'+@bname_out
print '借书时间:'+rtrim(@borrowTime_out) print '还书时间:'+rtrim(@backTime_out) print '管理员编号:'+@managerid_out print '是否续借:'+rtrim(@ifreborrow_out)
三、触发器
1、借书触发器,当借书时,图书表中的remain(剩余图书)自动减一。 create trigger t_borrow on tb_borrow for insert as
declare @bookid_read varchar(10)
select @bookid_read=bookid from inserted
begin
update tb_book set remain=remain-1 where bookid=@bookid_read End
2、还书触发器,当还书时,图书表中的remain自动加一。 create trigger t_back on tb_borrow for update as if update(backTime)
declare @bookid_read varchar(10)
select @bookid_read=bookid from inserted
begin
update tb_book set remain=remain+1 where bookid=@bookid_read End
3、罚款触发器,当借阅图书超期时,自动在punishment表中添加罚款记录,记录罚款读者、书名、天数、金额,并且自动将reader表中的ifeffective置为0,是该读者不能再借书。 create trigger t_punish on tb_borrow for update as
if update(backTime) begin
declare @backTime datetime,
@borrowTime datetime, @ifreborrow tinyint, @days int, @days1 int, @bmoney int,
@readerid varchar(10), @bookid varchar(10)
select @backTime=backTime from inserted select @borrowTime=borrowTime from inserted select @ifreborrow=ifreborrow from inserted select
@days=convert(int,@backTime)-convert(int,@borrowTime)
select @readerid=readerid from inserted select @bookid=bookid from inserted if @days>30 begin
if @ifreborrow=1
begin
if @days>60 begin
select @days1=@days-60 select @bmoney=@days1*0.1 insert into
tb_punishment(readerid,bookid,days,bmoney) values(@readerid,@bookid,@days1,@bmoney)
update tb_reader set ifeffective=0 where
readerid=@readerid
end
end
if @ifreborrow=0 begin
select @days1=@days-30 select @bmoney=@days1*0.1 insert into
tb_punishment(readerid,bookid,days,bmoney) values(@readerid,@bookid,@days1,@bmoney)
update tb_reader set ifeffective=0 where
readerid=@readerid
end
end
end
4、读者是否有效触发器,当读者借书时,检查reader表中的ifeffective属性,若为0则说明有超期罚款,不能借书。 create trigger t_ifcanborrow on tb_borrow for insert as
declare @readerid varchar(10),
@ifeffective tinyint
select @readerid=readerid from inserted
select @ifeffective=ifeffective from tb_reader where readerid=@readerid if @ifeffective=0 begin
print '您有超期罚款!' rollback transaction end
四、视图脚本
1、创建视图查询各种图书的书号、书名、总数和在册数。 create view view_query
as select bookid,bname,quantity,remain from tb_book 2、创建视图查询读者的超期罚款情况,其中包括读者号,读者姓名,罚款书名,罚款金额。
create view view_reader
as select tb_punishment.readerid,rname,bname,bmoney from tb_punishment,tb_book,tb_reader where tb_punishment.bookid=tb_book.bookid and tb_punishment.readerid=tb_reader.readerid
五、数据库恢复与备份
数据库的完全备份 use db_library go
backup database db_library
to disk='H:\\LibarySystem\\backup\\f_db_library' with init Go
数据库的恢复 use db_library go
backup database db_library
to disk='H:\\LibarySystem\\backup\\f_db_library' with init Go
数据库差异备份 use db_library go
backup database db_library
to disk='H:\\LibarySystem\\backup\\d_db_library' with differential Go
数据库的恢复 use master go
restore database db_library
from disk='H:\\LibarySystem\\backup\\f_db_library' with norecovery go
restore database db_library
from disk='H:\\LibarySystem\\backup\\d_db_library' with replace go
因篇幅问题不能全部显示,请点此查看更多更全内容