
图书管理系统数据库设计.doc
13页成都信息工程大学 图书管理数据库系统设计图书管理数据系统啊电子商务2班第二组www.sdong.org前言尊敬的 XX 老师,这是2010级电子商务2班第二组(以下简称“我们”)的数据库作业经过一学期的学习,我们对这门课程有了深刻的认识此次数据库系统设计正是检验我们学习成果之际我组成员团结协作、认真分析查阅相关资料,完成了这个作业因时间仓促、水平有限,错误甚多,还请老师斧正我组成员向老师致敬组构成与信息组别:2组长:陈建(2010211079)组员:孙仁秀(2010211047)、何明昊(2010211076)、陈建、程茜(2010211048)(按姓氏降序排列)任务分工(我组分工明确、平均)数据库设计:程茜(概念设计)、孙仁秀(关系表设计)函数与存储过程:陈建数据库备份、事务:何明昊上机数据库创建、word总体编辑:程茜演示数据录入、演示截图:孙仁秀目录封面 1前言 2目录 3一、 需求分析: 4二、 业务流程: 5三、 数据库设计 51. 数据库概念结构设计 52. 数据库逻辑设计 6四、 创建用户自定义函数和存储过程 81. 根据书号或出版社查找图书信息 82. 根据借书证号查询借阅者信息 83. 根据书号和借书证号创建借阅记录 9五、 创建事务 9六、 数据库备份 10七、 实践操作 10八、 我们的体会 12一、 需求分析:在信息时代,图书馆已成为全社会的一个重要的公共信息资源,面对成千上万的图书和众多的借阅者,妥善的管理图书和借阅者的资料是及其重要的,借助计算机信息系统可大大减轻工作强度,提高工作效率。
《图书管理系统》是为了满足图书馆管理图书的工作而设计的,应具有以下功能:1. 基本信息录入a) 图书信息管理:记录图书基本信息,包括书号、书名、作者、出版社、出版日期、入库时间、价格、库存量b) 借阅者信息管理:记录借阅者基本信息,包括借书证号、姓名、性别、联系、可借数量c) 出版社信息管理:包括出版社编号、出版社名称、联系、地址2. 借阅管理借书管理:记录借书信息,包括借书证号、书号、借阅时间、应还日期、归还时间、借阅状态3. 查询统计a) 查询图书信息,以书名或出版社或作者作为条件,支持模糊查询,并可打印输出报表b) 查询借阅者借/还书信息,可打印二、 业务流程:书籍建档出版社资料管理借阅者信息管理借书还书图 2-1 数据库应用流程三、 数据库设计1. 数据库概念结构设计借阅信息应还时间借书证号借阅状态归还时间借阅时间书号属于出版社出版社编号出版社名称联系出版社地址出版社其他出版日期库存价格出版社作者入库时间书名书号图书借阅者借书证号姓名性别联系可借数量借阅信息图 3-1 各个实体E-R图及其联系到关系模型的转化注:由于排版不便,将借阅信息独立出来实体的关系模型: 图书(书号,价格,书名,入库时间,库存,出版社,作者,出版日期) 借阅者(借书证号,姓名,联系,性别,可借数量) 出版社(出版社编号,联系,出版社地址,出版社名称)其中下划线标注的属性表示关键字。
1:n关系到关系模型的转化该数据库中的1:n关系是“图书”与“出版社”,一本图书只能对应一个出版社,一个出版社可以有多本图书因此我们将图书的出版社属性作为外部关键字,以确定该图书对应的出版社信息m:n联系到关系模型的转化 该数据库中,“借阅者”和“图书”通过“借阅信息”联系起来借阅信息”分别用两个实体的关键字作为外部关键字借阅状态指明了借阅者是否归还此书借阅信息(借书证号,书号,借阅时间,借阅状态,归还时间,应还时间)2. 数据库逻辑设计现在需要将书面的数据库概念模型转化为SQL Server 2000所支持的数据模型下面给出转化后“表”表3-1 bookinfo 图书信息表列名数据类型约束说明书号Varchar(20)不能为空主键价格Money>0无书名Varchar(50)不能为空无入库时间Datetime默认当前值库存Int>=0无出版社Int外键Pubs作者Varchar(10)默认佚名出版日期Datetime不能为空无注:出版社属性指的是出版社编号,由我们自行编当新书入库时,如果出版社(Pubs)表中无此出版社信息,应先将其添加子出版社表表3-2 borrowerinfo 借阅者信息表列名数据类型约束说明借书证号Varchar(10)长度为10主键姓名Varchar(10)不能为空无联系Varchar(11)长度为11无可借数量Tinylint默认10性别Char(2)男,女无注:可借数量依据成都信息工程大学所用的系统,本科生最大可借数量为10本,表示只能同时借10本书,在本系统中,可借数量将根据借阅信息表的借阅状态来增减。
表 3-3 pubs 出版社信息表列名数据类型约束说明编号Int长度为5主键联系Varchar(15)不能为空无出版社地址Varchar(50)不能为空无出版社名称Varchar(30)不能为空无注:该表主要是给采购人员用的,借阅者并不很关心图书的出版社信息表3-3 lendinfo 借阅信息表列名数据类型约束说明借书证号Varchar(10)长度为10外键书号Varchar(20)不能为空外键借阅时间Datetime默认主键、索引借阅状态Bit默认1应还时间Datetime默认当前+30天归还时间Datetime默认当前注:借阅时间在一般情况下不会在同一秒,故设为主键,由于此表记录增加快,我们使用借阅时间作为顺序索引,按时间排序当扫描录入时,一些默认值被设为当前时间默认的借阅期为30天以上表还说明了一些字段的规则、约束、索引等,接下来我们将据此上机创建完整的数据库四、 创建用户自定义函数和存储过程一些常用的操作,如新书入库、借还书、新增借阅者等,我们将其创建为自定义函数或过程,根据给出的参数快速完成数据库操作在需求分析时提出的“查询统计”也将用此实现1. 根据书号或出版社查找图书信息我们使用如下transact-SQL语句来创建一个存储过程。
create proc book_find(@str varchar(30),@type int) --str参数是搜索关键字as if @type=1 --值为1表示搜索书名 select a.*,b.出版社名称 into findinfo from bookinfo a inner join pubs b on b.编号=a.出版社 and a.书名 like '%'+ @str +'%' else begin if @type=2 --值为2表示搜索出版社名 select a.*,b.出版社名称 into findinfo from bookinfo a inner join pubs b on b.编号=a.出版社 and (a.书名 like '%'+ @str +'%' or b.出版社名称 like '%'+ @str +'%') else --其他值表示综合搜索 select a.*,b.出版社名称 into findinfo from bookinfo a inner join pubs b on b.编号=a.出版社 and b.出版社名称 like '%'+ @str + '%' endselect * from findinfo然后执行 exec book_find '成都',2 得到如下结果:图 4-1 存储过程执行结果执行后会增加一个表:findinfo,如需打印请打印此表。
2. 根据借书证号查询借阅者信息我们使用如下命令来创建自定义函数create function lendinfo_find(@str varchar(10)) --str参数是搜索关键字returns tableasreturn(select lendinfo.*,borrowerinfo.姓名,borrowerinfo.可借数量,borrowerinfo.性别 from lendinfocross join borrowerinfo where lendinfo.借书证号=@str)执行select dbo.lendinfo_find('2010211079') 得到:图 4-2 用户自定义函数注:有的SQL Sever会报错无对象,请参阅“用户自定义函数唤醒”3. 根据书号和借书证号创建借阅记录create proc lendinfo_add(@book_id varchar(10),@lend_id varchar(10))as if exists(select * from lendinfo where 书号=@book_id) begin if (select 可借数量 from lendinfo where 借书证号=lend_id)>0 --判断可借数量 begin insert into lendinfo(借书证号,书号,借阅状态,归还时间) values(@lend_id,@book_id,0,getdate()) update borrowinfo set 可借数量=(select 可借数量 from borrowinfo where 借书证号=@lend_id)+1 --读者还书,将可借数量加1 where 借书证号=@lend_id else print ‘再借书目达到上限,请还一部分后再借!’ end end else begin insert into lendinfo(借书证号,书号,借阅状。
