数据库系统原理课程设计

仅限参考:不要直接拷贝使用。直接拷贝使用、不利于自己的学习进步。加油、加油、加油

课程名称: 数据库系统原理课程设计
设计题目:图书借阅管理系统。
已知技术参数和设计要求:
图书借阅管理系统
(1)某图书借阅管理系统需要如下信息:

  • 读者信息,包括身份证号,姓名,性别,电话号码等。
  • 书籍信息,包括书籍ISBN编号,书籍名称,作者,单价,出版社,出版日期,库存数等。
  • 书籍种类信息,包括书籍种类编号,书籍种类名称等。
    其业务规则描述如下:
  • 一个读者可借阅多本书籍,但读者借阅的书籍数量不能超过十本,读者借阅书籍时有借阅时间。
  • 一个读者可归还多本书籍,归还书籍时有归还时间,约定读者借阅书籍的时间若超过30天,归还时需缴纳罚金。
  • 一个读者还可续借多本书籍。
    (2)系统功能基本要求:
    A. 使用存储过程完成以下查询统计。
  • 按照一定条件查询图书信息,比如图书名称、作者、价格范围等信息。
  • 根据读者姓名查询读者的借阅、归还记录。
    B. 定义一些视图。
  • 统计书籍的借阅情况。
  • 显示客户的借阅记录。
    C. 使用存储过程和触发器模拟完成一个订单交易
    图书借阅主要包括读者注册,登录,查询书籍,借阅书籍(注意图书借阅只面向注册会员,且注意逾期记录查询及图书库存等信息),归还书籍,续借书籍等全过程。

摘 要

随着科技的发展,传统的各行各业都有一定的升级发展。阅读书籍在人们的生活中是一件不可缺少的事情。传统的书籍借阅方式由人工手动记录完成、不但耗费大量的人力物力、还会导致一些记录的失误。效率不是很理想。通过对书籍进行数字化处理,将书籍以数据的形式保存在数据库系统中,便于管理员进行数据的管理。其次、读者可以通过使用计算机在短时间内查询图书馆是否存在自己所要查询的书籍,这个是传统借阅方式所不能达到的;读者可以自动完成借书还书等一系列操作。读者个人信息记录在数据库中、比如读者的借阅书籍的数量、应该归还书籍的时间等。图书管理员通过操作电脑便可以查询读者的借阅情况。可以对读者进行罚款、根据读者的诚信记录来控制读者能否继续借书。现代形式的由计算机控制的图书馆借阅系统的管理,不论在效率还是成本上都比传统形式的有优势。

在这里插入图片描述

第1章 设计内容与要求

1.1、设计背景

随着网络技术的发展,网络技术的应用能给人们的生活带来方便。传统形式的图书借阅管理繁琐、当借阅人数增加时不利于图书的管理;图书的流通率和利用率较低,不利于文献信息的广泛传播和利用。而网络技术的使用可以解决这一些难题。

1.2、设计要求

具体要求:

  • 使用存储过程完成以下查询统计。
  • 按照一定条件查询图书信息,比如图书名称、作者、价格范围等信息。
  • 根据读者姓名查询读者的借阅、归还记录。
  • .定义一些视图。
  • 统计书籍的借阅情况。
  • 显示客户的借阅记录。
  • 使用存储过程和触发器模拟完成一个订单交易
  • 图书借阅主要包括读者注册,登录,查询书籍,借阅书籍(注意图书借阅只面向注册会员,且注意逾期记录查询及图书库存等信息),归还书籍,续借书籍等全过程。

第2章 需求分析

2.1、业务描述

(1)通过计算机网络技术的应用来管理图书借阅情况
(2)借阅者可以查询借阅书籍、当归还书籍时,图书管理员能够判断其是否能够借阅书籍。
(3)需要将图书的所有信息编写进入数据库,在查询时只需输入相应的图书编号便能够查询到

2.2数据库设计环境说明

数据库实例	数据库系统	数据库部署环境	数据库设计工具	数据库存放位置	说明
MSSQLSERVER	名称:SQL Server,版本:2008 R2	软硬件、网络环境	Visio 	Windows(c:)>sql 2008 r2	通过SQL语句来管理数据库的运行

2.3数据库对象命名规则

数据库对象	命名规则	备注
表	Tbl_功能描述字符串	例如:tbl_studen学生表
视图	View_功能描述字符串	例如:view_student学生视图
存储	Proc_功能描述字符串	例如:Proc_course 课程表](https://img-blog.csdnimg.cn/b24bd633802d4175b6ed93b9976d5374.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6I-c6bif5LiA5Y-35piv5oiR5a6e6ZSk,size_18,color_FFFFFF,t_70,g_se,x_16)

2.4需求分析

首先图书借阅者查询所借图书是否存在、如果存在则可以借取,否则不能借取。借取图书者可以查寻自己借取图书的相关信息包括借书日期归还信息。归还图书的时候,图书管理员可以查询所借图书是否在正常的归还书籍的期限之内。若果在正常期限内、还书完成、不影响下次借书。如果超过了还书期限,则根据超出期限的天数,借阅者交纳相应的资金。如果借阅者不交资金,下次则不能正常的借书。
借阅者可以按照一定条件查询图书的相关信息,根据读者的姓名可以查询堵着的借阅、归还记录。通过编写相应的SQL语句可以实现这些基本功能。

第3章 数据库设计

3.1系统功能结构

在这里插入图片描述

3.2、数据库概念结构设计

3.2.1 借阅者信息实体图
在这里插入图片描述

============================================================================
3.2.2 书籍类别实体图
在这里插入图片描述

============================================================================
3.2.3 书籍信息实体图
在这里插入图片描述

============================================================================
3.2.4 借阅记录实体图
在这里插入图片描述

============================================================================
3.2.5 还书信息实体图
在这里插入图片描述

============================================================================
3.2.6 罚款信息实体图
在这里插入图片描述

============================================================================
3.2.7 学生实体图
在这里插入图片描述

============================================================================
3.2.8实体之间大的关系图
在这里插入图片描述

3.3 数据库逻辑结构设计

主键用下划线标识,外键用波浪线标识
读者
1、书籍类别(书籍类别编号、类别名称)
2、借阅者信息实体(借阅证号、姓名、性别、登记日期、读者类别)
3、读者实体(借阅证号、读者类别、学号、借阅数、电话、身份证号)
4、书籍(书籍编号、书籍名称、书籍类别编号、作者、出版社、出版日期、价格、是否可借、库存量)
5、借阅(借阅证号、书籍编号、借阅时间,归还时间)
6、还书(借阅证号、书籍编号、还书时间)
7、罚款(借阅证号、姓名、书籍名称、书籍编号、借阅时间、归还时间、应还时间、罚款金额)
8、读者类别(读者类别编号、读者类别名称)

3.4 数据库规范化分析

关于INF、2NF、3NF的区别参考这个文章(下边的可能有误、哈哈哈哈哈哈。当时我没整明白)
https://blog.csdn.net/weixin_43304253/article/details/119696652
在读者实体关系中,通过学号→借阅数,学号→电话,学号→身份证号,身份证号→学号,学号→读者类别,非主属性借阅数,电话,读者类别能够被学号唯一标识。但是身份证号可以确定学号,学号也可以唯一标识身份证号,是2nf。
在书籍实体关系中,书籍编号可以确定书籍名称,书籍类别、作者等一些属性,属性之间相互独立没有依赖关系。属于3NF。

3.5 数据库物理设计

通过对本数据库表的功能进行详细描述和汇总得到XX系统表汇总如表3.1所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.6 数据库安全及维护设计

  • 1、用户身份鉴别作为数据库管理系统提供的最外层安全防护措施。每个用户在系统中都有一个用户标识。系统内部记录着所有合法用户的标识,每次用户进入系统、由系统进行核对,通过鉴定后才能提供使用数据库管理系统的权限。可以通过静态口令鉴别、动态口令鉴别、生物特征鉴别、智能卡鉴别
  • 2、定义用户权限和合法权限检查机制一起组成数据库管理系统的存取控制子系统,通过授权给合法用户,使其具有对数据库的相关操作,同时也可以撤销其的相关权限。其中自主存取控制较为普遍,通过授权给用户对数据库的操作,强制存取控制方法采用分等级的形式来对数据库操作。不同的等级所能查看到和修改的数据不同,低级的不能查看高级的数据。
  • 3、可以为不同的用户定义不同的视图、把数据对象限制在一定的范围内。通过视图机制把要保护的数据对无权存取的用户隐藏起来,从而对数据提供一定程度的安全保护。
  • 4、对借阅者和书籍两类实体设置触发器。每当借阅者借阅一本图书,借阅书籍的总数目会增加,而图书馆的图书数目则减少。当借阅书籍达到一定的数量,读者不能继续借书;图书馆某一类书籍为0时,则不能借阅该书籍。对于特定的系统事件发生时,对规则的条件进行检查,如果条件成立则执行规则中的动作。
  • 5、通过完整数据库备份+日志备份策略。当数据库出现数据丢失或灾难,可以将数据库恢复到故障点,从而恢复所有数据。

第4章 系统详细设计

4.1 视图的设计

1、建立一个查询读者信息的视图
目的:显示读者的信息
功能:便于管理员了解到读者的信息
意义:便于管理

create view Reader
as
select studentno,readername,readersex,phone,id
from tbl_System_readers,tbl_System_student
where tbl_System_readers.readerid=tbl_System_student.readerid

结果:
在这里插入图片描述

在这里插入图片描述
2、建立一个查询读者借阅图书的信息视图
目的:显示读者借阅信息
功能:便于管理员了解到借阅者何时归还书籍
意义:便于管理员通知读者归还图书时期通知

CREATE VIEW readerbook
as select tbl_System_readers.readername,tbl_Borrow_record.bookid,tbl_Borrow_record.borrowdate,tbl_Borrow_record.shouldreturn
from tbl_Borrow_record,tbl_System_readers
where tbl_System_readers.readerid=tbl_Borrow_record.readerid 

结果
在这里插入图片描述
3、建立一个查询图书书籍分类的信息视图
目的:显示书籍类别信息
功能:通过输入书籍编号便可查询书籍属于哪个类型的书籍
意义:便于读者找寻图书,管理员整理归还图书

CREATE VIEW book
as select bookid,bookname,bookauthor,booksytle

from tbl_System_books,tbl_Book_sytle
where tbl_System_books.booksytleno=tbl_Book_sytle.booksytleno

结果
在这里插入图片描述
在这里插入图片描述

4.2 存储过程的设计

(1)用户注册存储过程
目的:存储插入的客户信息
功能:插入客户信息
意义:下次重复同样能够的操纵时,可直接执行存储过程,简化操作步骤

CREATE proc zhuce
@readerid char(9),@readername char(9),@readersex char(2), @readertype char(10),@redate char(30)
as
begin
if exists(select * from tbl_System_readers where readerid=@readerid)
print '该读者已经存在'
else
begin
insert into tbl_System_readers
 values (@readerid,@readername,@readersex , @readertype ,@redate)
print '读者注册成功'
end
end

CREATE proc zhuce1
@readerid char(9),@studentno char(20),@phone char(20),@id char(20),@readertype char(10),@borrownum int
as
insert into tbl_System_student values(@readerid,@studentno,@phone,@id ,@readertype,@borrownum )

结果
在这里插入图片描述
(2)管理员存储图书过程
目的:向图书馆增添书籍
功能: 通过写入一本书的详细信息,书籍入库
意义:方便管理员增添书籍

CREATE PROC proc_new_books
@bookid char(20),@bookname char(30),@booksytleno char(20),@bookauthor char(30),@bookpub char(30),
@bookupdate char(30),@bookindate char(30),@price float,@totalnum int
as
insert into tbl_System_books values(@bookid,@bookname,@booksytleno,@bookauthor,@bookpub,@bookupdate,@bookindate,@price,@totalnum)
 exec proc_new_books '1111','计算机组成原理','6','王爱英','清华大学出版社','2001-01-03','2003-11-15','35','20'
 exec proc_new_books '1112','数据库原理','6','萨师煊','高等教育出版社','2007-07-02','2007-10-14','40','10'    
 exec proc_new_books '1113','C程序设计','6','谭浩强','清华大学出版社','2002-02-02','2004-3-14','60','15'
 exec proc_new_books '1114','计算机体系结构','6','石娇英','浙江大学出版社','2004-10-02','2007-10-14','60','8'
 exec proc_new_books '1115','数据结构','6','吴伟民','清华大学出版社','2002-06-28','2004-4-21','40','10'
 exec proc_new_books '1116','中华历史年','1','吴强','北京大学出版社','2005-07-02','2007-10-14','60','10'
 exec proc_new_books '1117','日本文化','1','吴小鹏','北京大学出版社','2005-04-09','2005-10-24','37','10'
 exec proc_new_books '1118','微观经济学','5','李小刚','北京大学出版社','2000-10-02','2001-8-14','35','10'
 exec proc_new_books '1119','影视艺术文学','4','苏庆东','北京大学出版社','1999-04-02','2000-05-14','40','10'
 exec proc_new_books '1120','探索宇宙奥秘','2','苏庆东','北京大学出版社','2000-04-08','2001-10-14','26','10'
 exec proc_new_books '1121','马原','5','刘建军','高等教育出版社','2003-02-12','2004-03-12','34','10’

结果
在这里插入图片描述
(3)根据图书的编号查询书籍
目的:查找自己所需要的图书
功能:通过输入书籍编号进行查询
意义:便于操作,短时间便能在大量图书中查找自己所要

CREATE proc proc_book
@bookid char(20)
as 
if not exists (select * from tbl_System_books where bookid=@bookid)
print '该书籍不存在'
else 
select *from tbl_System_books where bookid=@bookid

测试
在这里插入图片描述
在这里插入图片描述
(4)根据读者的姓名查询书籍借阅归还
目的:查询自己曾看过的书籍
功能:通过输入个人信息进行查询借书记录
意义:更好的帮助自己选择书籍阅读

CREATE proc proc_reader
@readername char(9)
as
if not exists (select *from tbl_System_readers where readername=@readername)
print '该读者不存在借书记录'
else
select  borrowdate,returndate
from tbl_Borrow_record,tbl_Return_record,tbl_System_readers
where tbl_Borrow_record.bookid=tbl_Return_record.bookid and tbl_Return_record.readerid=tbl_System_readers.readerid and tbl_System_readers.readername=@readername

测试结果在这里插入图片描述
在这里插入图片描述

4.3触发器过程的设计

(1)借书触发器的设计
目的:控制借阅量和图书数量变化
功能:通过增加一条借阅记录,判断读者的借阅量是否可借,图书馆书籍是否可借
意义:实现读者借书量和书籍量的动态变化

create trigger zhu
on tbl_Borrow_record
 after insert--
as
begin
declare @readerid char(9),@bookid char(20),@k int ,@y int
select @readerid=readerid ,@bookid=bookid from inserted
if exists(select * from tbl_System_books where bookid=@bookid)and exists(select *from tbl_System_readers where readerid=@readerid)
begin--
select @k=totalnum from tbl_System_books where bookid=@bookid
select @y=borrownum from tbl_System_readers where readerid=@readerid
if(@k>0  and @y<10)
update tbl_System_readers
set borrownum=borrownum+1
where readerid=@readerid
else
begin--
rollBack
print '已达到借书数目或者图书馆没有剩余书籍数量,不能再借'
end--
end--
else
begin
rollBack
print '不存在该图书,不能借书'
end
end

在这里插入图片描述
(1)还书触发器的设计
目的:控制借阅量和图书数量变化
功能:通过增加一条还书记录,读者可借书数目增加1,对应书籍的库存量增加1
意义:实现读者借书量和书籍量的动态变化

create trigger zhu2
on tbl_Return_record
for insert
as
declare @readerid char(9)
select @readerid=readerid from inserted
update tbl_System_readers
set borrownum=borrownum-1
where readerid=@readerid
create trigger zhu3
on tbl_Return_record
for insert
as
declare @bookid char(20)
select @bookid=bookid from inserted
update tbl_System_books
set totalnum=totalnum+1
where bookid=@bookid

第5章 安全性设计

5.1 防止用户直接操作数据库的方法

1、做一个中间层,放在服务器运行,客户端程序向中间层程序申请数据。
2、为用户分组,在数据库中对用户进行权限设置。
3、写存储过程,用存储过程访问数据库数据,然后对存储过程设置权限

5.2 用户角色与权限

在这里插入图片描述

总 结

通过本次课程设计我对数据库的基础知识有了更加深刻的了解,能够运用SQL语句实现一些功能需求。通过不同知识的联合使用可以解决一些生活中的实际问题,对自己灵活掌握知识有很大的帮助。在使用数据库实现项目时,首先需要了解业务的流程和其需要实现的功能需求,然后设计概念模型、然后转化为逻辑模型、然后就是编程实现业务逻辑。整体业务需要在开始实现前规划好流程,要不在实现过程中会遇到很多麻烦。在开始设计前,考虑到各种情况,择优选择设计概念和方法对后来的实现工作至关重要。在完成整个设计后,其次进行编码实现,最后进行数据测试。通过在失败中找到不足,可以帮助自己很好地提高,在系统实现的过程中自己也遇到了很多的麻烦,通过查询资料和阅读文献资料也能找到方法解决问题。编程是一个不断学习的过程,在每一次的实战中都会学习到一些新的技巧和方法。自己也得到了进一步的提高。

posted on 2022-08-28 22:19  热爱技术的小郑  阅读(315)  评论(0编辑  收藏  举报