1、图书管理系统数据库设计【仅供参考】1、摘要: 一个简单图书管理系统包含图书馆内书籍信息、学校在校学生信息和学生借阅信息。此系统功效分为面向学生和面向管理员两部分,其中学生能够进行借阅、续借、归还和查询书籍等操作,管理员能够完成书籍和学生增加,删除和修改和对学生,借阅、续借、归还确实定。 2、需求分析 针对通常图书管理信息系统需求,经过对图书管理工作过程内容和数据步骤分析,设计以下面所表示数据项: ? 读者信息 属性:读者学号,读者姓名,读者性别,联络电话,所在系,生效日期,失效日期,违章情况,累计借书,备注 主键:读者学号 ? 书籍信息 属性:ISBN,书名,作者,出版社,出版日期,介绍,备注
2、 主键:ISBN ? 管理员信息 属性:工作号,姓名,性别,电话,家庭住址,备注 主键:工作号 2.1 数据步骤 经过对系统调查和可行性分析,画出系统数据步骤图: 2.1.1 读者 学生对图书管理系统要求有: ? 能按多种方法(比如书名、编号、作者)查询图书馆藏书情况。 ? 能够方便地借阅图书、续借图书、归还图书 ? 能够查询自己基础资料、图书情况 ? 能够熟悉图书管理系统使用。 读者进入系统工作步骤图为: 注册 查询 修改信息 借阅续借 图书 归还 注销 2.1.2 图书管理员 她们对图书管理系统要求有: 1. 能方便对图书进行录入登记,注销陈旧书籍。 2. 能够方便地对新生进行登记,或注销
3、已经毕业学生信息(基础信息,借阅信息)。 3. 能够随时公布部分诸如各学院学生借阅图书超期情况、馆内藏书情况、借情况等信息,方便各学院能够随时获知本院学生部分借书信息。 图书管理职员作步骤图为: 注册 录入图书 录入新生 注销图书 注销学生 注销 修改个人信息 超期处理 3、概念模型设计 数据库需要表述信息有以下多个: (1)读者信息 (2)书籍信息 (3)管理员信息 (4)读者和书籍之间关系(借阅关系E-R图) (5)管理员和书籍之间关系(管理员_书籍E-R图) (6)管理员和学生之间关系(管理员_学生 E-R图) 3.1管理员和读者之间关系 3.3管理员和书刊之间关系 3.3读者和书籍之间
4、关系(借阅三元关系) 4、逻辑设计 从理论E/R模型到理论关系模型整理转换,经过E/R模型到关系模型转化,能够得到以下关系模式: 借阅关系 属性:工作号,读者学号,ISBN,是否续借,借书日期,还书日期,备注。 主键:工作号,读者学号,ISBN 管理员_书籍关系 属性:工作号,ISBN,添加时间,是否在馆 主键:工作号,ISBN 管理员_学生关系 属性:工作号,读者学号,确定借还 主键:工作号,读者学号 5、数据库逻辑结构 5.1图书信息表 Page字段名称数据类型是否可为空 ISBN(key)varchar(20)否 书名varchar(50)否 作者varchar(12)否 出版社varc
5、har(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)否 性别v
6、archar(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)否 ISBNchar(10)否 添加时间data time是 是否在馆char(14)是 5.6 管理员_学生 字段名称数据类型是否可为空 工作号char(10)
7、 否 读者学号char(10)否 借还确定char(4)否 6、物理设计 从理论关系模型到实现实施数据库建立,物理文件安排和建立索引 6.1 建立索引 为了提升在表中搜索元组速度,在实际实现时候应该基于键码建立索引是各表中建立索引表项: (1) 读者信息(读者学号) (2) 书籍信息(ISBN) (3)管理员信息(工作号) (4)借阅(工作号,读者学号,ISBN) (5)管理员_书籍(工作号,ISBN) (6)管理员_学生(工作号,读者学号) 6.2 用SQL实现设计 实现该设计环境为Windows Perfessinal+MSSQLServer .0 6.2.1建立图书信息表 create
8、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
9、(12), 所在系 varchar(20) not null, 生效日期 datetime, 失效日期 datetime, 违章状态 char(2), Page累计借书 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
10、 借阅 (工作号 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 ta
11、ble 管理员_学生 (工作号 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管理员_书籍索引
12、ON 管理员_书籍 (工作号,ISBN读者学号) CREATE UNIQUE INDEX管理员_学生ON管理员_学生 (工作号,读者学号) 6.2.8定义视图 ()读者表视图 CREATE VIEW 读者视图 AS SELECT * FROM 读者 ()图书表视图 CREATE VIEW 图书视图 AS SELECT * FROM 图书 ()管理员表视图 CREATE VIEW 管理员视图 AS SELECT * FROM 管理员者 6.2.9管理员操作 (1)注册(register) INSERT INTO 管理员 (工作号,姓名,性别,电话,家庭住址,备注) PageVALUES(#工作号
13、,#姓名,#性别,#电话,#家庭住址,#备注) 说明:在登记操作后,管理员得到一个唯一工作号,能够依据这个工作号采查询和修改数据。 (2)注销(unregister) DELETE FROM Provider WHERE(工作号=#工作号); (3)修改个人信息(update) UPdate 管理员 Set (工作号=#工作号,姓名=#姓名,性别=#性别,电话=#电话,家庭住址=#家庭住址,备注=#备注) WHERE(工作号#工作号) (4)增加书籍(addbooks) INSERT INTO 图书 (ISBN,书名,作者,出版社,出版日期,介绍,备注) VALUES(#ISBN,#书名,#作
14、者,#出版社,#出版日期,#介绍,#备注) INSERT INTO 管理员_书籍表(工作号,ISBN,添加时间,是否在馆) VALUES(#工作号,#ISBN,#添加时间,#是否在馆) (5)删除书籍(deletebooks) DELETE 图书 WHERE(ISBN =# ISBN) (6)修改书籍(updatebooks) UPDATE 图书(书名=#书名, 作者=#作者, 出版社=#出版社, 出版日期= #出版日期, 介绍=#介绍, 备注=#备注) WHERE(ISBN =# ISBN) 6.2.10读者操作 (1)注册(register) INSERT INTO 读者(读者学号,读者姓
15、名,读者性别,联络电话,所在系, 生效日期,失效日期,违章情况,累计借书,备注) VALUES(#读者学号,#读者姓名,#读者性别,#联络电话,#所在系, #生效日期,#失效日期,#违章情况,#累计借书,#备注) 说明:在登记操作后,读者得到一个唯一ID,能够依据这个ID来查询和修改自己信息。 (2)注销(unregister) DELETE 读者 WHERE(读者学号=#读者学号) (3)修改个人信息(update) UPDATE 读者 Set(读者姓名=#读者姓名,联络电话=#联络电话, 所在系=#所在系,生效日期=#生效日期,失效日期=#失效日期, 违章情况=#违章情况,累计借书=#累计
16、借书,备注=#备注) 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) W
17、HERE(工作号=#工作号 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) Page 更新还书信息 UPDAT
18、E管理员_图书 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
19、As If Update(是否续借) begin Update 借阅 Set 还书日期=还书日期+30 Where 工作号=#工作号 end 7、试验数据示例:测试阶段(代码调试) 7.1 输入数据设计 (1)插入管理员 INSERT INTO 管理员(工作号,姓名,性别,电话,家庭住址,备注) VALUES(1001,张三,男,成城市,呵呵) (2)插入读者 INSERT INTO 读者(读者学号,读者姓名,读者性别,联络电话,所在系, 生效日期,失效日期,违章状态,累计借书,备注) VALUES(0222,李瑞,男,环境,-05-06,-05-06,1,10,哈) (3)插入图书 INSE
20、RT INTO 图书 (ISBN,书名,作者,出版社,出版日期,介绍,备注) VALUES(x,数据库原理教程,王珊,清华大学出版社,-05-05,数据库教程,哈) INSERT INTO 图书 (ISBN,书名,作者,出版社,出版日期,介绍,备注) VALUES(,数据库教程,王书,清华大学出版社,-05-05,数据库教程,哈) (4)插入管理员_书籍表 INSERT INTO 管理员_书籍 (工作号,ISBN,添加时间,是否在馆) VALUES(1001,x,-7-7,0) INSERT INTO 管理员_书籍 (工作号,ISBN,添加时间,是否在馆) VALUES(1001,-7-8,1
21、) (5) 插入借阅信息 INSERT INTO 借阅(工作号,读者学号,ISBN,是否续借,借书日期,还书日期,备注) VALUES(1001,0222,x,0,-7-6,-8-6,哈) INSERT INTO 管理员_学生(工作号,读者学号,借还确定,ISBN) VALUES(1001,0222,0, x) 7.2 完成借阅、续借、归还操作设计 假设读者想借书籍名为数据库教程且不知道ISBN (1)借阅操作以下: if(select 书名 from 图书 where ISBN=)= 数据库教程) Pagebegin INSERT INTO 借阅(工作号,读者学号,ISBN,是否续借,借书日
22、期,还书日期,备注) VALUES(1001,0222,0,-7-7,-8-7,哈) UPDATE 管理员_书籍 SET 是否在馆=0 WHERE ISBN= UPDATE 读者 SET 累计借书=累计借书+1 WHERE 读者学号=0222 INSERT INTO 管理员_学生(工作号,读者学号,借还确定,ISBN) VALUES(1001,0222,0,) print 借阅成功! end else print 借阅失败! (2)续借操作以下: if(SELECT 是否续借 FROM 借阅 WHERE 工作号=1001 AND 读者学号=0222 AND ISBN =)=0) begin U
23、PDATE 借阅 SET 是否续借=1 WHERE 工作号=1001 AND 读者学号=0222 AND ISBN = print 续借成功! end else print 续借失败! (3)还书操作以下: If(SELECT 借还确定 FROM 管理员_学生 WHERE 工作号=1001 AND 读者学号=0222 AND ISBN=)=0) BEGIN UPDATE 管理员_书籍 SET 是否在馆=1 WHERE ISBN= print 还书成功! end else print 还书失败! 8、安全性设计 后台数据库应安装在指定服务器上,用户只能经过登录软件访问数据库表中数据。 除上述方法外,不应提供用户其它访问数据库数据直接或间接路径。 9、数据库管理和维护说明 对于本数据管理和维护,比如数据库备份和恢复,能够使用T-SQLBACKUP DATABASE命令和RESTORE DATABASE命令具体实用说明请参考SQL Server 联机丛书或使用企业管理器中“全部任务”“备份数据库(B)”菜单项和或“还原数据库(R)”菜单项操作。