图书管理系统数据库设计

1、摘要:
一个简单的图书管理系统包括图书馆内书籍的信息、学校在校学生的信息以及学生的借阅信息。此系统功能分为面向学生和面向管理员两部分,其中学生可以进行借阅、续借、归还和查询书籍等操作,管理员可以完成书籍和学生的增加,删除和修改以及对学生,借阅、续借、归还的确认。
2、需求分析
针对一般图书管理信息系统的需求,通过对图书管理工作过程的内容和数据流程分析,设计如下面所示的数据项:
Ø        读者信息
属性:读者学号,读者姓名,读者性别,联系电话,所在系,生效日期,失效日期,违章状况,累计借书,备注
主键:读者学号
Ø        书籍信息
属性: ISBN ,书名,作者,出版社,出版日期,简介,备注
主键: ISBN
Ø        管理员信息
属性:工作号,姓名,性别,电话,家庭住址,备注
主键:工作号
2.1 数据流程
通过对系统的调查和可行性分析,画出系统的数据流程图:
2.1.1 读者
学生对图书管理系统的要求有:
Ø        能按各种方式(比如书名、编号、作者)查询图书馆的藏书情况。
Ø        能够方便地借阅图书、续借图书、归还图书
Ø        能够查询自己的基本资料、图书情况
Ø        能够熟悉图书管理系统的使用。
读者进入系统工作的流程图为 :
 

 
注册
查询
修改信息
借阅续借
图书
归还
注销

2.1.2 图书管理员
他们对图书管理系统的要求有:
1.  能方便的对图书进行录入登记,注销陈旧的书籍。
2.  能够方便地对新生进行登记,或注销已经毕业的学生信息(基本信息,借阅信息)。
3.  能够随时发布一些诸如各学院学生借阅图书超期情况、馆内藏书情况、借情况等信息,以便各学院能够随时获知本院学生的一些借书信息。
图书管理员工作的流程图为 :

 
注册
录入图书
录入新生
注销图书
注销学生
注销
修改个人信息
超期处理

 
3、概念模型设计
  数据库需要表述的信息有以下几种:
 (1) 读者信息
 (2) 书籍信息
(3) 管理员信息
(4) 读者与书籍之间的关系 ( 借阅关系 E-R )
(5) 管理员与书籍之间的关系(管理员 _ 书籍 E-R 图)
(6) 管理员与学生之间的关系(管理员 _ 学生  E-R 图)
3.1管理员与读者之间的关系
3.3管理员与书刊之间的关系
3.3读者与书籍之间的关系(借阅三元关系)
4、逻辑设计
从理论 ‘E/R 模型 到理论 关系模型 的整理转换 ,通过 E/R 模型到关系模型的转化,可以得到如下关系模式:
借阅关系
属性:工作号读者学号, ISBN 是否续借,借书日期,还书日期,备注。
主键:工作号,读者学号, ISBN
管理员 _ 书籍关系
属性:工作号, ISBN 添加时间,是否在馆
主键:工作号, ISBN
管理员 _ 学生关系
属性:工作号,读者学号,确认借还
主键:工作号,读者学号
5、数据库逻辑结构
5.1图书信息表   
字段名称
数据类型
是否可为空
ISBN(key)
varchar(20)
书名
varchar(50)
作者
varchar(12)
出版社
varchar(50)
出版日期
datetime
简介
varchar(200)
  备注
varchar(200)
5.2 读者信息表
字段名称
数据类型
是否可为空
读者学号( key
varchar(12)
读者姓名
varchar(10)
读者性别
varchar(2)
联系电话
varchar(10)
所在系
varchar(12)
生效时间
datatime
失效时间
datatime
违章状况
varchar(2)
累计借书
int
备注
varchar(100)
5.3 管理员信息表
字段名称
数据类型
是否可为空
工作号(key)
varchar(12)
姓名
varchar(12)
性别
varchar(2)
电话
varchar(12)
住址
varchar(12)
备注
varchar(100)
5.4 借阅表
          
字段名称
数据类型
是否可为空
工作号
 char(10)
ISBN
 char(10)
读者学号
 char(10)
借书日期
datetime
还书日期
datetime
是否续借
char(4)
备注
varchar(100)
 
5.5 管理员_书籍
字段名称
数据类型
是否可为空
工作号
char(10)
ISBN
char(10)
添加时间
data time
是否在馆
char(14)
 
5.6 管理员_学生
         
字段名称
数据类型
是否可为空
工作号
char(10)
读者学号
char(10)
借还确认
char(4)
 
6、物理设计   
从理论 关系模型 到实现 / 实施 数据库建立 ,物理文件的安排和建立索引
6.1 建立索引
为了提高在表中搜索元组的速度,在实际实现的时候应该基于键码建立索引是各表中建立索引的表项:
(1)  读者信息(读者学号)
(2)  书籍信息 ISBN
(3) 管理员信息(工作号)
(4) 借阅 工作号,读者学号, ISBN
(5) 管理员 _ 书籍(工作号, ISBN
(6) 管理员 _ 学生(工作号,读者学号)
6.2 SQL实现设计
实现该设计的环境为 Windows 2000 Perfessinal+MSSQLServer 2000.0
6.2.1建立图书信息表
 create table  图书
 (ISBN varchar(20) not null primary key,
   书名  varchar(50) not null,
   作者  varchar(12) not null,
   出版社  varchar(50),
   出版日期  datetime,
   简介  varchar(200),
   备注  varchar(200),)
6.2.2建立读者信息表
create table  读者
 ( 读者学号  varchar(12) not null primary key,
   读者姓名  varchar(10) not null,
   读者性别  varchar(2) not null,
   联系电话  varchar(12),
   所在系    varchar(20) not null,
   生效日期  datetime,
   失效日期  datetime,
   违章状态  char(2),
   累计借书  int,
   备注     varchar(100),)
6.2.3建立管理员信息表
        create table  管理员
        ( 工作号  varchar(12) not null primary key,
姓名    varchar(12) not null,
性别    varchar(2) not null,
电话    varchar(12),
家庭住址  varchar(50),
备注  varchar(100))
6.2.4建立借阅表
     create table  借阅
( 工作号  char(10) not null,
ISBN char(10) not null,
读者学号  char(10) not null,
借书日期  datetime not null,
还书日期  datetime not null,
是否续借  char(4) not null,
        备注  varchar(100) )
6.2.5建立管理员_书籍表
        create table  管理员 _ 书籍
( 工作号  char(10) not null,
ISBN char(10) not null,
添加时间  datetime,
是否在馆  char(4))
6.2.6建立管理员_学生表
       create table  管理员 _ 学生
( 工作号  char(10) not null,
读者学号  char(10) not null,
ISBN char(10) not null,
借还确认  char(4) not null)
6.2.7建立索引
      CREATE UNIQUE INDEX  图书索引  ON  图书 (ISBN)
    CREATE UNIQUE INDEX  读者索引  ON  读者 ( 读者学号 )
CREATE UNIQUE INDEX  管理员索引  ON  读者 ( 工作号 )
CREATE UNIQUE INDEX 借阅索引  ON  借阅 ( 工作号 , 读者学号 ,ISBN)
CREATE UNIQUE INDEX 管理员 _ 书籍索引  ON  管理员 _ 书籍  ( 工作号 ,ISBN 读者学号 )
CREATE UNIQUE INDEX 管理员 _ 学生 ON 管理员 _ 学生  ( 工作号 , 读者学号 )
6.2.8定义视图
(1)读者表视图
    CREATE VIEW  读者视图
    AS
      SELECT *
      FROM  读者
(2)图书表视图
    CREATE VIEW  图书视图
    AS
      SELECT *
      FROM  图书
(3)管理员表视图
    CREATE VIEW  管理员视图
    AS
      SELECT *
      FROM  管理员者
 
 
6.2.9管理员操作
(1) 注册 (register)
INSERT INTO  管理员  ( 工作号 , 姓名 , 性别 , 电话 , 家庭住址 , 备注 )
VALUES(# 工作号 ,# 姓名 ,# 性别 ,# 电话 ,# 家庭住址 ,# 备注 )
说明:在登记操作后 , 管理员得到一个唯一的工作号 , 可以根据这个工作号采查询和修改数据。
(2) 注销 (unregister)
DELETE
FROM Provider
WHERE( 工作号 =# 工作号 )
(3) 修改个人信息 (update)
UPdate  管理员
Set ( 工作号 =# 工作号 , 姓名 =# 姓名 , 性别 =# 性别 , 电话 =# 电话 , 家庭住址 =# 家庭住址 , 备注 =# 备注 )
WHERE( 工作号= # 工作号 )
(4) 增加书籍( addbooks
INSERT INTO  图书  (ISBN, 书名 , 作者 , 出版社 , 出版日期 , 简介 , 备注 )
VALUES(#ISBN,# 书名 ,# 作者 ,# 出版社 ,# 出版日期 ,# 简介 ,# 备注 ) INSERT INTO  管理员 _ 书籍表 ( 工作号 ,ISBN, 添加时间 , 是否在馆 )
VALUES(# 工作号 ,#ISBN,# 添加时间 ,# 是否在馆)
(5) 删除书籍 (deletebooks)
DELETE  图书
WHERE(ISBN =# ISBN)
(6) 修改书籍 (updatebooks)
UPDATE  图书 ( 书名 =# 书名 作者 =# 作者 出版社 =# 出版社 出版日期 =
# 出版日期 简介 =# 简介 备注 =# 备注 )
WHERE(ISBN =# ISBN)
6.2.10读者操作
(1) 注册 (register)
INSERT INTO  读者 ( 读者学号 , 读者姓名 , 读者性别 , 联系电话 , 所在系 ,
生效日期 , 失效日期 , 违章状况 , 累计借书 , 备注 )
VALUES(# 读者学号 ,# 读者姓名 ,# 读者性别 ,# 联系电话 ,# 所在系 ,
# 生效日期 ,# 失效日期 ,# 违章状况 ,# 累计借书 ,# 备注 )
说明:在登记操作后 , 读者得到一个唯一的 ID, 可以根据这个 ID 来查询和修改自己的信息。
(2) 注销 (unregister)
DELETE  读者
WHERE( 读者学号 =# 读者学号 )
(3) 修改个人信息 (update)
UPDATE  读者  Set( 读者姓名 =# 读者姓名 , 联系电话 =# 联系电话 ,
所在系 =# 所在系 , 生效日期 =# 生效日期 , 失效日期 =# 失效日期 ,
违章状况 =# 违章状况 , 累计借书 =# 累计借书 , 备注 =# 备注 )
WHERE( 读者学号 =# 读者学号 )
(4) 查询( select
   SELECT  ISBN , 书名,作者,出版社
FROM 图书
WHERE ISBN=#ISBN OR 书名=#书名
6.2.11管理员对借阅关系的操作 
 (1)  插入读者的信息( insert
    INSERT INTO  借阅 ( 工作号 , 读者学号 ,ISBN, 是否续借 , 借书日期 , 还书日期 , 备注 )
 VALUES(# 工作号 ,# 读者学号 ,#ISBN,# 是否续借 ,# 借书日期 ,
# 还书日期 ,# 备注 )
(2)  更新信息( update
更新借出信息
UPDATE 借阅
SET( 借书日期 =# 借书日期 , 还书日期 = 借书日期 +30, 是否续借 =0)
WHERE( 工作号 =# 工作号  AND  读者学号 =# 读者学号  AND ISBN =#ISBN)
UPDATE 管理员 _ 图书
SET( 是否在馆 =0)
WHERE(ISBN=#ISBN)
UPDATA  学生
SET ( 累积借书 = 累积借书 +1)
WHERE( 读者学号 =# 读者学号 )
INSERT INTO 管理员 _ 学生 ( 工作号 , 读者学号 , 确认借还 ,ISBN)
VALUES(# 工作号 ,# 读者学号 ,”0”, #ISBN))
      ② 更新续借信息
UPDATE  借阅
SET( 是否续借 =# 是否续借 )
WHERE( 工作号 =# 工作号  AND  读者学号 =# 读者学号  AND ISBN =#ISBN)
       ③ 更新还书信息
UPDATE 管理员 _ 图书
SET( 是否在馆 =1)
WHERE(ISBN=#ISBN)
UPDATE 管理员 _ 学生
SET( 确认借还 =”1”)
WHERE( 工作号 =# 工作号  AND  读者学号 =# 读者学号  AND ISBN=#ISBN)
6.2.12触发器的建立
  (1) 时间触发器:
 Create Trigger  时间
 On  借阅
 For update,insert,delete
 As
 while (select datename(weekday,getdate()))=' 星期天 '
begin
print ' 时间错误 '
end
(2)update 触发器:
     Create Trigger  续借
    On  借阅
for Update
As
    If  Update( 是否续借 )
    begin
    Update  借阅
      Set  还书日期 = 还书日期 +30
      Where  工作号 =# 工作号
    end   
7、实验数据示例:测试阶段(代码调试)
7.1 输入数据设计
(1) 插入管理员
  INSERT INTO  管理员 ( 工作号 , 姓名 , 性别 , 电话 , 家庭住址 , 备注 )
VALUES(1001,' 张三 ',' ',02885965555,' 成都市 ',' 呵呵 ')
( 2) 插入读者
INSERT INTO  读者 ( 读者学号 , 读者姓名 , 读者性别 , 联系电话 , 所在系 ,
生效日期 , 失效日期 , 违章状态 , 累计借书 , 备注 )
VALUES(20050222,' 李瑞 ',' ',02888994456,' 环境 ','2007-05-06','2010-05-06','1',10,' ')
 (3) 插入图书
 INSERT INTO  图书  (ISBN, 书名 , 作者 , 出版社 , 出版日期 , 简介 , 备注 )
VALUES('730203009x',' 数据库原理教程 ',' 王珊 ',' 清华大学出版社 ','2006-05-05',' 数据库教程 ',' ')
INSERT INTO  图书  (ISBN, 书名 , 作者 , 出版社 , 出版日期 , 简介 , 备注 )
VALUES('7302030091',' 数据库教程 ',' 王书 ',' 清华大学出版社 ','2006-05-05',' 数据库教程 ',' ')
 (4) 插入管理员 _ 书籍表  
INSERT INTO  管理员 _ 书籍  ( 工作号 ,ISBN, 添加时间 , 是否在馆 )
VALUES(1001,'730203009x','2007-7-7','0')
INSERT INTO  管理员 _ 书籍  ( 工作号 ,ISBN, 添加时间 , 是否在馆 )
VALUES(1001,'7302030091','2007-7-8','1')
(5)  插入借阅信息
INSERT INTO  借阅 ( 工作号 , 读者学号 ,ISBN, 是否续借 , 借书日期 , 还书日期 , 备注 )
VALUES(1001,20050222,'730203009x','0','2007-7-6','2007-8-6',' ')
INSERT INTO  管理员 _ 学生 ( 工作号 , 读者学号 , 借还确认 ,ISBN)
VALUES(1001,'20050222','0', '730203009x')
7.2 完成借阅、续借、归还的操作设计
假设读者想借书籍名为 《数据库教程》且不知道 ISBN
(1) 借阅操作如下:
if((select  书名  from  图书  where ISBN='7302030091')= ' 数据库教程 ')
begin
INSERT INTO  借阅 ( 工作号 , 读者学号 ,ISBN, 是否续借 , 借书日期 , 还书日期 , 备注 )
VALUES(1001,20050222,'7302030091','0','2007-7-7','2007-8-7',' ')
UPDATE  管理员 _ 书籍
SET  是否在馆 ='0'
WHERE ISBN='7302030091'
UPDATE  读者
SET  累计借书 = 累计借书 +1
WHERE  读者学号 =20050222
INSERT INTO  管理员 _ 学生 ( 工作号 , 读者学号 , 借还确认 ,ISBN)
VALUES(1001,20050222,'0','7302030091')
       print ' 借阅成功 !'
   end
else
   print ' 借阅失败 !'
(2) 续借操作如下:
if((SELECT  是否续借
   FROM  借阅
   WHERE  工作号 =1001 AND  读者学号 =20050222 AND ISBN ='7302030091')='0')
begin
UPDATE  借阅
SET  是否续借 ='1'
WHERE  工作号 =1001 AND  读者学号 =20050222 AND ISBN ='7302030091'
print ' 续借成功 !'
   end
else
   print ' 续借失败 !'
 (3) 还书操作如下:
If((SELECT  借还确认
 FROM  管理员 _ 学生
 WHERE  工作号 =1001 AND  读者学号 =20050222 AND ISBN='7302030091')='0')
BEGIN
UPDATE  管理员 _ 书籍
SET  是否在馆 ='1'
WHERE ISBN='7302030091'
print ' 还书成功 !'
    end
 else
 print ' 还书失败 !'
后台数据库应安装在指定服务器上,用户只能通过登录软件访问数据库表中的数据。
除上述方法外,不应提供用户其他访问数据库数据的直接或间接途径。
9数据库管理与维护说明
       对于本数据的管理与维护,例如数据库的备份与恢复,可以使用 T-SQL BACKUP DATABASE 命令和 RESTORE DATABASE 命令 [ 具体实用说明请参照 SQL Server 2000 联机丛书 ] 或使用企业管理器中的 所有任务 ”→“ 备份数据库 (B)” 菜单项和或 还原数据库 (R)” 菜单项操作。
 

猜你喜欢

转载自blog.csdn.net/qq_41848006/article/details/80466196