图书管理系统数据库.docx
- 文档编号:26243394
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:13
- 大小:851.52KB
图书管理系统数据库.docx
《图书管理系统数据库.docx》由会员分享,可在线阅读,更多相关《图书管理系统数据库.docx(13页珍藏版)》请在冰豆网上搜索。
一、需求分析:
1.1图书管理系统的需求定义为:
1.1.1使用读者编号、读者姓名、图书编号和图书姓名实现图书借阅功能;
1.1.2使用读者类型和类型编号实体对教师、学生和其他三种身份进行不同的借阅条件管理;
1.1.3使用限借数量、借阅日期和归还日期实现不同身份的借阅管理功能;
二、概要设计:
2.1图书馆管理系统数据表设计:
2.1.1Readers表:
读者信息表,存取读者信息;
2.1.2Books表:
图书信息表,存取图书信息;
2.1.3Borrowinf表:
借阅信息表,管理借阅情况;
2.1.4Readtype表:
读者类型表,管理读者类型;
这些数据表结合图书馆数据库中的四个存储过程,即实现了普通图书馆的大部分功能。
如读者借阅图书功能、读者归还图书功能、读者查询图书借阅情况功能、读者检索的图书信息功能;
图2.1数据E-R图
三、逻辑设计
3.1图书馆管理系统触发器设计:
3.1.1Tri_bowbook功能表现:
只有在图书馆内相关书籍尚有库存的情况下,读者才可以进行借阅操作;
3.1.2Tri_bowbook2功能表现:
还书时将还书信息更新到各表中;
3.1.3Tri_bowbook3功能表现:
限制借书数目,其中教师不得借阅超过3本,学生不得借阅超过2本,其他人不得借阅超过1本;
四、物理设计:
表4.1Readers
列名
数据类型
允许空值
说明
ReaderID
char(10)
否
标明读者唯一编号
Name
char(8)
是
读者姓名
BorrowedQuantity
int
是
已借数目
TypeID
int
是
读者类型
表4.2Books
列名
数据类型
允许空值
说明
BookID
char(15)
否
标明图书唯一编号
Name
varchar(50)
是
图书名称
Author
char(8)
是
图书作者
Publisher
varchar(30)
是
出版社
Standing
int
是
剩余数量
表4.3Borrowinf
列名
数据类型
允许空值
说明
ReaderID
char(10)
否
标明读者唯一编号
BookID
char(15)
否
标明图书唯一编号
BorrowedDate
datetime
否
借书日期
ReturnDate
datetime
是
还书日期
表4.4Readtype
列名
数据类型
允许空值
说明
TypeID
int
否
标明类型唯一编号
Name
varchar(20)
否
类型名称
LimitBorrowQuantity
int
是
限借数量
BorrowTerm
int
是
限借时间
五、数据库实施:
5.1建立数据库:
5.1.1使用SQLServerManagementStudio新建数据库:
使用SQLServerManagementStudio创建一个图书管理数据库,初始大小为5MB,最大为30MB,数据库自动增长,增长方式是按1%的比例增长;日志文件初始为1MB,最大可增长到10MB,按1MB增长。
数据库名称为student_grade,存放路径为“D:
\XSCJSYS”。
日志文件的名称为student_log,存放路径为“D:
\XSCJSYS”。
如下图所示:
图5.1.1新建数据库
5.1.2设计数据库表:
在登录后依次打开文件资源管理器中的数据库-TSGL-表,并选择“新建”,进行数据库表的设计(在此时设计好主键);
图5.1.2数据库表设计
5.1.3数据初始化:
在创建好的数据表中右键选择-并击前200行,输入编辑好的数据:
图5.1.3设定表数据
5.2完整性测试与检查:
5.2.1参照完整性测试:
useTSGL
insertintoreadersvalues('2014010323','李老师')
insertintoreadersvalues('2014030335','小何')
insertintoreadersvalues('2014039999','小王')
go
图5.2.1参照完整性测试
5.2.2创建图书借出数量不超过总数的CHECK约束:
go
altertablebooks
withnocheckaddconstraintbooks_Standing
check(Standing>=0andStanding<=5)
go
图5.2.2创建CHECK约束
5.3使用SQL语句查询:
5.3.1使用like语句查询所有姓王的读者:
select*fromreaderswherenamelike'王%';
图5.3.1模糊查询
5.2查询所有已经借阅的图书名称、总数:
selectborrowinf.bookid,books.name,count(*)as借出数目
fromborrowinfinnerjoinbooksonborrowinf.BookID=books.BookID
groupbybooks.name,borrowinf.bookid
orderby借出数目desc
图5-7多表查询、统计查询
5.3查询所有已借图书的读者信息:
useTSGL
selectreaders.Name,readers.ReaderID,readers.BorrowedQuantityas已借数目
fromreadersinnerjoinborrowinfonborrowinf.readerID=readers.readerID
groupbyreaders.Name,readers.ReaderID,readers.BorrowedQuantity
图5-8多表查询、统计查询
5.4查询被借出的图书中出版社是机械工业出版社的书名和书籍编号:
useTSGL
selectbooks.Name,books.BookID
frombooksinnerjoinborrowinfonborrowinf.BookID=books.BookIDandbooks.Publisher='机械工业出版社'
groupbybooks.Name,books.BookID
图5-9多表查询
5.5查询借阅了《数据库原理》的读者的姓名和读者编号:
useTSGL
selectreaders.Name,readers.ReaderID
fromreaders
wherereaders.ReaderIDin(
selectborrowinf.ReaderIDfromborrowinfwhereBookID=(
selectBookIDfrombookswherebooks.Name='数据库原理'
))
图5-10子查询
5.6查询王同学借阅的图书名称和编号:
useTSGL
selectbooks.Name,books.BookID
frombooks
wherebooks.bookIDin(
selectborrowinf.bookIDfromborrowinfwhereBookIDin(
selectBookIDfromborrowinfwhereReaderID=(
selectReaderIDfromreaderswherereaders.Name='王同学'
)))
图5-11子查询
6触发器实现:
6.1若无库存无法借书的触发器:
createtriggertri_bowbook
onborrowinf
forinsert,update
as
declare@bidchar(15),@bstdint
select@bid=bookidfrominserted
select@bstd=standingfrombookswhere@bid=books.BookID
if(@bstd=0)
beginrollbacktransaction
print'借阅失败!
'
print'此书已无库存!
'
end
图5-12借阅限制触发器
6.2不得超过读者类型限制的借阅上限触发器:
USE[TSGL]
GO
/******Object:
Trigger[dbo].[tri_bowbook2]ScriptDate:
2020/6/2921:
12:
30******/
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
ALTERtrigger[dbo].[tri_bowbook2]
on[dbo].[borrowinf]
forinsert,update
as
declare@rdidchar(10),@typeint,@limint,@numint
select@rdid=readeridfrominserted
select@type=typeidfromreaderswhere@rdid=readers.readerid
select@lim=LimitBorrowQuantityfromreadtypewhere@type=readtype.typeid
select@num=BorrowedQuantityfromreaderswhere@rdid=readers.readerid
if(@num=@lim)
beginrollbacktransaction
print'借阅失败!
'
print'已达到借阅上限,请先归还图书再进行借书操作!
'
end
图5-13限制触发器
6.3添加借阅记录时自动更新信息以实现借阅功能的触发器:
createtriggertri_bowbook3
onborrowinf
forinsert
as
declare@bidchar(15),@reidchar(10),@stdint,@nstdint,@borint,@nborint
select@bid=bookidfrominserted
select@reid=readeridfrominserted
select@std=standingfrombookswhere@bid=books.BookID
select@nstd=@std+1
select@bor=BorrowedQuantityfromreaderswhere@reid=readers.ReaderID
select@nbor=@bor+1
UPDATEbookssetStanding=@nstdwhere@bid=books.BookID
UPDATEreaderssetBorrowedQuantity=@nborwhere@reid=readers.ReaderID
图5-14借阅触发器
一、数据库安全与备份:
1.改变身份验证模式:
使用“对象资源管理器”中的“服务器属性”对话框改变服务器身份验证模式:
图6-1设置身份验证模式
2.分离数据库:
使用sp_detach_db存储过程分离JXGL数据库:
图6-2分离数据库
二、总结:
通过本次课程设计,我掌握了设计数据库的基本流程,掌握了E-R图的制作方法,熟悉了使用SQL语句进行统计查询、多表查询、子查询等多种查询数据的方式,掌握了使用触发器对数据库进行增删改查的各种操作,但有的部分仍有不熟悉的情况,需要在今后的学习工作中继续深入学习关于数据库的各种知识。
感谢老师一个学期的辛勤教导!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图书 管理 系统 数据库