数据库系统原理课程设计报告 图书借阅管理系统
第1章 设计背景与需求分析
1.1 设计背景
1.1.1 图书管理的现状
图书馆作为一种资源的集散地,图书和用户在借阅资料繁多,包含很多的信息管理,现在有很多的图书馆都是初步的开始使用,甚至尚未使用计算机进行资源管理,没有建立相对应的图书管理数据系统,而是使用人工计算,抄写进行,数据处理工作量大,容易出错和数据丢失。
1.2.2 选题的目的、意义
图书管理系统数据库有着手工管理无法比拟的优点,如检索迅速、查找方便、可靠性高、存储量大、保密性好,成本低等等。这些优点能极大提高图书管理的效率,因此,开发一套能够为用户提供充足的信息和快捷的查询手段的图书管理系统是十分必要的。
1.2 功能需求
1.2.1读者信息的增加、修改、删除等基本操作
1.读者类别信息的输入,包括图书类型、图书册数等
2.读者档案信息的输入,包括读者编号、读者类型等
1.2.2图书信息的增加、修改、删除等基本操作。
1.图书类别信息的输入,包括类别编号,类别名称等。
2.图书类别信息的查询,修改,包括类别编号,类别名称等。
3.图书档案信息的输入,包括图书编号,图书名称,图书类别,作者名称,出版社名称,出版日期,图书页数,关键词,登记日期,备注信息等。
1.2.3图书流通管理
1.图书征订管理
2.图书借阅管理
3.图书归还管理
4.图书罚款管理
1.3 系统开发环境
1、系统:Windows XP,7,8,10
2、开发平台:SQL SERVER 2070, VISUAL BASIC6.0
1.4 SQL SERVER 2017概述
SQL SERVER2017是一个关系数据管理系统,是微软公司推出的新版本,该版本增加了许多先进的功能,具有方便使用,可伸缩性好与软件集成度高等的优点,可以运行在个人电脑到大型多处理器的服务器等多种平台使用。
官网下载说明https://www.microsoft.com/zh-cn/sql-server/sql-server-2017-comparison
第2章 数据库概念结构设计
2.1 实体型结构
2.2 实体间的联系
1.一个出版社对应多个图书,一个图书对应一个出版社,出版社和图书是一对多联系。
2.一个图书类型对应多个图书,一个图书对应一个图书类型,图书类型和图书是一对多联系。
3.一个读者类型对应多个读者,一个读者对应一个读者类型,读者类型和读者是一对多联系。
4.一个书库对应多个图书类型,一个图书类型对应一个书库,书库和图书类型是一对多联系。
5.一个图书入库单对应多个图书入库单明细,一个图书入库单明细对应一个图书入库单,图书入库单和图书入库单明细是一对多联系。
6.一个图书报损单对应多个图书报损单明细,一个图书报损单明细对于一个图书报损单,图书报损单和图书报损单明细是一对多联系。
7.一个读书对应多个图书入库单明细,一个图书入库单明细对应一个图书,图书和图书入库单明细是一对多联系。
8.一个读书对应多个图书报损单明细,一个图书报损单明细对应一个图书,图书和图书报损单明细是一对多联系。
9.一个读者对应多个罚款交费单,一个罚款交罚单对应一个读者,读者和罚款交费单是一对多联系。
10.一个职工对应多个图书入库单,一个图书入库单对应一个职工,职工和图书入库单是一对多联系。
11.一个职工对应多个图书报损单,一个图书报损单对应一个职工,职工和图书报损单是一对多联系。
12.一个职工对应多个罚款交费单,一个罚款交费单对应一个职工,职工和罚款交费单是一对多联系。
13.一个读者对应多个图书,一个图书对应多个读者,读者和图书之间是多对多联系。
2.3 整体简化E-R图
第3章 数据库逻辑结构设计
3.1 E-R图向关系模式转换的原则
1. 一个实体型转换为一个关系模式。
关系的属性:实体型的属性
关系的码:实体型的码
2.一个1:1联系可以转换为一个独立的关系模式,也可以与任何一端对应的关系模式合并。
3.一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式 合并。
4.一个m:n联系转换为一个关系模式。
5.三个或三个以上实体间的一个多元联系可以转换为一个关系模式。
6.具有相同码的关系模式可合并。
目的:减少系统中关系个数
7.同一实体集的实体之间的联系即自联系,也可以按1:1,1:n和m:n三种情况分别处理。
3.2各个表的逻辑结构
表3.1 出版社表
列 名 |
数据类型 |
长 度 |
主 键 |
非空 |
备注 |
出版社编号 |
Int |
|
Yes |
|
|
出版社名称 |
Varchar |
50 |
|
Yes |
|
出版社地址 |
Varchar |
50 |
|
Yes |
|
表3.2 图书表
列 名 |
数据类型 |
长 度 |
主 键 |
非空 |
备注 |
图书编号 |
varchar |
20 |
Yes |
|
|
出版社编号 |
Int |
|
|
Yes |
外码,参照出版表出版社编号 |
图书类型编号 |
char |
1 |
|
Yes |
外码,参照图书类型表,图书类型编号 |
书名 |
varchar |
50 |
|
Yes |
|
作者 |
varchar |
20 |
|
Yes |
|
价格 |
Numeric(8,2) |
|
|
Yes |
|
页码 |
Int |
|
|
Yes |
|
库存总量 |
Int |
|
|
Yes |
|
现存量 |
Int |
|
|
Yes |
|
入库时间 |
Datetime |
|
|
|
|
借出次数 |
Int |
|
|
Yes |
|
表3.3 图书类型表
列 名 |
数据类型 |
长 度 |
主 键 |
非空 |
备注 |
图书类型编号 |
Char |
1 |
Yes |
Yes |
” |
图书类型名 |
varchar |
50 |
|
Yes |
|
书库号 |
int |
|
|
|
外码,参照书库表的书库号 |
表3.4 读者表
列 名 |
数据类型 |
长 度 |
主 键 |
非空 |
备注 |
证书编号 |
int |
|
Yes |
Yes |
|
读者类型编号 |
Char |
10 |
|
|
外码,参照读者类型表的读者类型编号 |
姓名 |
varchar |
50 |
|
Yes |
|
性别 |
Char |
10 |
|
Yes |
只能为“男”、或“女” |
出生日期 |
Datetime |
|
|
Yes |
|
身份证编号 |
char |
18 |
|
Yes |
必须是18位 |
图书借阅次数 |
int |
|
|
|
|
是否挂失 |
int |
|
|
|
0未挂失 1已挂失 |
已借册数 |
int |
|
|
|
|
未交罚款金额 |
Numeric(8,2) |
|
|
|
|
表3.5 读者类型表
列 名 |
数据类型 |
长 度 |
主 键 |
非空 |
备注 |
读者类型编号 |
Char |
10 |
Yes |
Yes |
|
读者类型名 |
vachar |
20 |
|
Yes |
|
可借阅册数 |
Int |
|
|
Yes |
有效范围是20---60
|
借期天数 |
int |
|
|
Yes |
有效范围是90---120
|
可续借天数 |
int |
|
|
Yes |
有效范围是10---60
|
表3.6 书库表
列 名 |
数据类型 |
长 度 |
主 键 |
非空 |
备注 |
书库号 |
int |
|
Yes |
Yes |
|
书库名 |
varchat |
50 |
|
Yes |
|
表3.7 职工表
列 名 |
数据类型 |
长 度 |
主 键 |
非空 |
备注 |
职工编号 |
int |
|
Yes |
Yes |
|
职工姓名 |
varchar |
50 |
|
Yes |
|
性别 |
Char |
10 |
|
Yes |
只能为“男”、或“女” |
出生日期 |
Datetime |
|
|
Yes |
|
文化程度 |
varchar |
20 |
|
Yes |
|
表3.8 罚款交费单表
列 名 |
数据类型 |
长 度 |
主 键 |
非空 |
备注 |
交费单号 |
int |
|
Yes |
Yes |
|
借书证编号 |
int |
|
|
Yes |
外码,参照读者表证书编号 |
日期 |
Datetime |
|
|
Yes |
|
金额 |
Numeric(8,2) |
|
|
Yes |
|
表3.9 图书入库单表
列 名 |
数据类型 |
长 度 |
主 键 |
非空 |
备注 |
入库编号 |
int |
|
Yes |
Yes |
|
入库日期 |
Datetime |
|
|
Yes |
|
经手职工编号 |
int |
|
|
|
外码,参照职工表的职工编号 |
是否入库 |
int |
|
|
|
0已入库 1未入库 |
表3.10 图书入库单明细表
列 名 |
数据类型 |
长 度 |
主 键 |
非空 |
备注 |
图书入库单编号 |
int |
|
Yes 报损单编号和图书编号一起作为主码 |
Yes |
外码,参照图书入库单表的图书入库编号 |
图书编号 |
varchar |
20 |
Yes |
外码,参照图书表的图书编号 |
|
数量 |
int |
|
|
Yes |
|
表3.11 图书报损单表
列 名 |
数据类型 |
长 度 |
主 键 |
非空 |
备注 |
报损单编号 |
int |
|
Yes |
Yes |
|
报损日期 |
Datetime |
|
|
Yes |
|
经手人编号 |
int |
|
|
|
外码,参照职工表的职工编号 |
表3.12 图书报损单明细
列 名 |
数据类型 |
长 度 |
主 键 |
非空 |
备注 |
图书报损单编号 |
int |
|
Yes 报损单编号和图书编号一起作为主码 |
Yes |
外码,参照图书报损单表的报损单编号 |
图书编号 |
varchar |
20 |
Yes |
外码,参照图书表的图书编号 |
|
数量 |
int |
|
|
Yes |
|
报损原因 |
Varchar |
100 |
|
Yes |
|
表3.13借阅表
列 名 |
数据类型 |
长 度 |
主 键 |
非空 |
备注 |
借书证编号 |
int |
|
Yes 借书证编号和图书编号一起作为主码 |
Yes |
外码,参照读者表的证书编号 |
图书编号 |
varchar |
20 |
Yes |
外码,参照图书表的图书编号 |
|
借书日期 |
Datetime |
|
|
Yes |
|
还书日期 |
Datetime |
|
|
|
还书日期>=借书日期
|
罚款金额 |
Numeric(8,2) |
|
|
|
|
是否续借 |
int |
|
|
|
0未续借 1已续借 |
3.3 视图结构
3.3.1 入库单视图
列 名 |
来源表 |
入库单编号 |
图书入库单表 |
入库日期 |
图书入库单表 |
经手人姓名 |
职工表 |
是否已入库 |
图书入库单表 |
图书编号 |
图书入库单明细表 |
书名 |
图书表 |
出版社名 |
出版社表 |
入库数量 |
图书入库单明细表 |
表3.3.2 报损单视图
列 名 |
来源表 |
报损单编号 |
图书报损单表 |
报损日期 |
图书报损单表 |
经手人姓名 |
职工表 |
图书编号 |
图书报损单明细表 |
书名 |
图书表 |
出版社名 |
出版社表 |
报损数量 |
图书报损单明细表 |
报损原因 |
图书报损单明细表 |
表3.3.3 读者未还借书视图
列 名 |
来源表 |
借书证编号 |
借阅表 |
读者姓名 |
读者表 |
未还书编号 |
借阅表 |
未还书名 |
图书表 |
出版社名 |
出版社表 |
借书日期 |
借阅表 |
可借期天数 |
读者类型表 |
罚款金额 |
借阅表 |
表3.3.4 图书分类库存视图
列 名 |
来源表 |
图书类型编号 |
图书类型表 |
图书类型名 |
图书类型表 |
库存册数合计 |
图书表 |
库存金额合计 |
图书表 |
表3.3.5 借出次数前100图书视图
列 名 |
来源表 |
图书编号 |
图书表 |
书名 |
图书表 |
借出次数 |
图书表 |
第4章 数据库物理结构设计
4.1索引的设计原则
(1)如果一个(或一组)属性经常在查询条件中出现,则考虑早这个(或这组)属性建立索引。
(2)如果一个属性经常作为最大值和最小值等聚集函数的参数,则考虑这个属性上建立索引。
(3)如果一个(或一组)属性经常在连接操作的连接条件中出现,则考虑在这个(或这组)属性上建立索引。
4.2 索引结构设计
表4.1 索引结构表
表名 |
索引名 |
索引列 |
备注(索引的设计理由) |
图书 |
书名索引 |
书名 |
经常查询的列 |
图书 |
出版社编号索引 |
出版编社号 |
经常连接的列 |
图书 |
图书类型索引 |
图书类型编号 |
经常连接的列 |
图书 |
作者索引 |
作者 |
经常查询的列 |
图书类型 |
书库号索引 |
书库号 |
经常连接的列 |
读者 |
姓名索引 |
姓名 |
经常查询的列 |
读者 |
图书借阅次数索引 |
图书借阅次数 |
聚集函数的参数 |
读者 |
已借册数索引 |
已借册数 |
聚集函数的参数 |
读者 |
未交罚款金额索引 |
未交罚款金额 |
聚集函数的参数 |
职工 |
姓名索引 |
姓名 |
经常查询的列 |
罚款交费单 |
借书证编号索引 |
借书证编号 |
经常连接的列 |
图书入库单 |
经手职工编号索引 |
经手职工编号 |
经常连接的列 |
图书入库单明细 |
图书入库单编号索引 |
图书入库单编号 |
经常连接的列 |
图书入库单明细 |
图书编号索引 |
图书编号 |
经常连接的列 |
图书报损单 |
经手职工编号索引 |
经手职工编号 |
经常连接的列 |
图书报损单明细 |
图书报损单编号索引 |
图书报损单编号 |
经常连接的列 |
图书报损单明细 |
图书编号索引 |
图书编号 |
经常连接的列 |
借阅 |
借书证编号索引 |
借书证编号 |
经常连接的列 |
借阅 |
图书编号索引 |
图书编号 |
经常连接的列 |
第5章 数据库实施
5.1 建表语句
CREATE TABLE 出版社 ( 出版社编号 INT PRIMARY KEY, 出版社名称 VARCHAR(50) NOT NULL, 出版社地址 VARCHAR(50) ); CREATE TABLE 书库 ( 书库号 INT PRIMARY KEY, 书库名 VARCHAR(50) NOT NULL ); CREATE TABLE 图书类型 ( 图书类型编号 CHAR(1)