图书管理系统数据库设计

来源:互联网 发布:php wget 下载文件 编辑:程序博客网 时间:2024/05/16 08:33
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 '还书失败!'
8安全性设计
后台数据库应安装在指定服务器上,用户只能通过登录软件访问数据库表中的数据。
除上述方法外,不应提供用户其他访问数据库数据的直接或间接途径。
9数据库管理与维护说明
      对于本数据的管理与维护,例如数据库的备份与恢复,可以使用T-SQLBACKUP DATABASE命令和RESTORE DATABASE命令[具体实用说明请参照SQL Server 2000联机丛书]或使用企业管理器中的所有任务”→“备份数据库(B)”菜单项和或还原数据库(R)”菜单项操作。
 
原创粉丝点击