目录

2023-01-11-数据库课程设计-图书馆管理系统1.数据库分析部分

数据库课程设计-图书馆管理系统(1.数据库分析部分)

如果对你有帮助,可以给卑微的博主留个赞、关注、收藏   (不是)

图书馆管理系统第一部分,数据库分析。

主要是需求分析、设计概要模块、数据库概念结构设计(E-R图)、数据库逻辑结构设计(表、存储过程、触发器)

目录

1. 需求分析

1.1 数据流图

1.1顶级数据流图

基于对图书馆管理信息系统的初步需求分析结果,其顶级数据流图如图1:

https://i-blog.csdnimg.cn/blog_migrate/2c78bf1e7d2ce9c9d488ba46968d1ea7.png 用户通过终端和系统交互,普通读者、图书管理员、系统管理员都可以使用终端,但是他们的账户权限不同,登录成功后,所能做的操作不同。交互的结果会在显示器以图形界面显示。

1.1.2 一级数据流图

一级数据流图如图2 :

https://i-blog.csdnimg.cn/blog_migrate/93239015300139caa425674c9aa19e8a.png

1.1.3 各模块数据流图

各功能模块的数据流图如图3:

https://i-blog.csdnimg.cn/blog_migrate/de14e3cac369fa9d539d378fd61a1f8b.png

1.2 数据字典

表1  读者注册信息数据字典

名字:读者注册信息
别名:
描述:用户在注册时,输入的个人信息聚合成的类(读者)
定义:用户名+姓名+密码md5+身份证+电话
位置:写入数据库readers表

表2  读者用户信息数据字典

名字:读者用户信息
别名:
描述:用户查询个人信息
定义:用户名+姓名+年龄+身份证+电话
位置:读者个人信息查询结果

表3 图书管理员注册信息数据字典

名字:图书管理员注册信息
别名:
描述:图书管理员账户信息,由系统管理员插入
定义:用户名+姓名+密码md5+身份证+电话+入职时间+工作位置+账户状态
位置:写入数据库managers表

表4 图书管理员用户信息数据字典

名字:图书管理员用户信息
别名:
描述:图书管理员查询个人信息
定义:用户名+姓名+年龄+身份证+电话+入职时间+工作位置
位置:图书管理员个人信息查询结果

表5 书籍信息数据字典

名字:书籍信息
别名:
描述:馆藏书籍的信息
定义:书籍编号+书籍名字+价格+状态+馆藏位置
位置:书籍信息查询返回结果,数据库books表

表6 意见数据 数据字典

名字:意见数据
别名:
描述:用户提交的意见经过处理后形成的一条记录,存入数据库
定义:意见记录编号+提交者用户名+用户提交的意见(文本)+时间+处理状态
位置:数据库opinions表,反馈处理界面

表7 意见处理结果数据字典

名字:意见处理结果
别名:
描述:对于用户提交的意见,由图书管理员处理后给出结果,再被意见处理模块封装成一条记录,存入数据库
定义:意见记录编号+处理结果(文本)+处理人用户名+时间
位置:数据库opinion_results表

表8 反馈结果数据字典

名字:反馈结果
别名:
描述:处理完成的反馈,查询显示意见数据和意见处理结果的自然连接
定义:参考 意见数据和意见处理结果
位置:反馈记录查询结果

表9 借阅记录数据字典

名字:借阅记录
别名:
描述:读者借书形成的记录
定义:借阅记录号+读者用户名+书籍编号+时间+办理人用户名+状态+可借时长
位置:数据库borrows表

表10 归还记录数据字典

名字:归还记录
别名:
描述:读者归还所借书籍形成的记录
定义:借阅记录号+归还时间+办理人用户名+滞纳金额+类型
位置:数据库returns表

1.3 系统流程分析

用户先进行选择,经过注册后登录系统,或者使用已有账号登录系统。进入用户操作界面,普通读者、图书管理员、系统管理员有各自可以执行的操作。选择某个操作后,系统执行并输出结果到显示器。系统流程图如图4:

https://i-blog.csdnimg.cn/blog_migrate/172f72827dc76c6bcf5d7b20cf047aa3.png

2. 系统概要模块设计

通过对图书馆管理信息系统的分析,定义出系统模块设计图如图5:

https://i-blog.csdnimg.cn/blog_migrate/92601d481db926b6aa1b365063cef426.png

其中定义的功能模块包括以下方面:

注册模块:进入系统前需要登录,没有账号就需要注册账号。填写用户名,姓名,密码以及身份证,手机号。验证通过即可注册成功。该模块注册只能获得读者账号。

登录模块:用户输入用户名,密码,经过系统验证通过后可以进入系统操作界面。不同类别的用户都可以使用此模块,但是进入的操作界面功能不同。

用户操作模块:登录成功后,进入此模块。分3类用户:

第一类是读者,读者账户可以进行的操作有个人信息查询修改、书籍信息查询、意见反馈、借阅记录查询、反馈记录查询;

第二类是图书管理员,图书管理员账户可以进行的操作有个人信息查询修改、书籍信息查询、图书管理、意见反馈处理、图书借阅、图书归还、借阅延期、借阅记录查询、反馈记录查询,归还记录查询;

第三类是系统管理员,系统管理员账户可以进行的操作是管理图书管理员账户,他只进行图书管理员的查询、添加、修改、删除。对于图书的处理,由图书管理员进行。

3. 数据库概念结构设计(E-R图)

E-R图 如图6:

https://i-blog.csdnimg.cn/blog_migrate/6c2314a5991fe2a4d9f947b09ed00ac5.png

图书管理员账户由系统管理员创建并管理,一个系统管理员创建多个图书管理员,之后图书馆由图书管理员进行管理,但是不关心图书管理员是被谁创建。读者可以进行登录,然后在用户终端查询和修改个人信息,查询图书信息,借阅记录,提交反馈,查询反馈结果,这些是个人可以完成的,由系统去查询数据库并返回结果给用户;读者进行借书和还书需要图书管理员帮助。总体上说,一个图书管理员可以服务多名读者,一名读者可以被多个图书管理员服务,具体的, 一名读者可以同时借多本书,一本书同时只能被一名读者借,每一本书借书过程只能由一个图书管理员负责。一本书还书过程由一个图书管理员负责

这样形成借阅表和归还表

一名读者可以提交多条反馈记录,

一个图书管理员可以处理多条反馈记录,而

一条反馈记录只由一个图书管理员处理

形成意见反馈表和反馈结果表。 而图书管理员对图书的增删改查我们也不关心,不成为表。

4. 数据库逻辑结构设计

4.1 基本表设计

读者用户表 ,存放已注册读者用户的账户信息

表11 读者用户表(readers)

字段名称数据类型说   明
reader_namevarchar(20)用户名(账号)
passwordvarchar(35)密码md5
namevarchar(10)姓名
id_numvarchar(20)身份证号
phone_numvarchar(15)手机号

图书管理员用户表,存放所有图书管理员的账户信息

表12 图书管理员用户表(managers)

字段名称数据类型说   明
manager_namevarchar(20)用户名(账号)
passwordvarchar(35)密码md5
namevarchar(10)姓名
id_numvarchar(20)身份证号
phone_numvarchar(15)手机号
entry_timedate入职时间
work_positionvarchar(20)工作位置
statevarchar(5)账户状态(正常、注销之一)(默认正常)

意见反馈表,存放用户的意见反馈形成的记录

表13 意见反馈表(opinions)

字段名称数据类型说   明
opinion_rec_numint反馈记录的编号
reader_namevarchar(20)提交者用户名
opinionvarchar(100)反馈意见文本
submit_timedate意见提交时间
statevarchar(10)处理状态(待处理、处理完成)(默认待处理)

书籍信息表, 图书馆藏书的信息

表14 书籍信息表(books)

字段名称数据类型说   明
book_numint图书在图书馆的编号
book_namevarchar(30)书籍名字
book_pricefloat书籍价格
book_statevarchar(10)书籍状态(可借,不可借) (默认不可借)
book_positionvarchar(30)馆藏位置(刚添加时暂时为空)

意见处理结果表, 意见处理完成后,结果存入此表。

表15 意见处理结果表(opinion_results)

字段名称数据类型说   明
opinion_rec_numint被处理的记录的编号
resultvarchar(100)意见处理结果文本
transactorVarchar(20)处理人的用户名,是一个图书管理员
finish_timedate处理完成时间

借阅记录表, 读者借阅书籍形成的记录

表16 借阅记录表(borrows)

字段名称数据类型说   明
borrow_rec_numint借阅记录的编号
reader_namevarchar(20)借阅者用户名
book_numint被借图书在图书馆的编号
borrow_timedate借阅时间
transactorvarchar(20)办理人的用户名
borrow_statevarchar(10)借阅状态(已还,待还)
borrow_durationsmallint允许借阅时长(天)(默认30)

归还记录表 , 读者归还书籍形成的记录

表17 归还记录表(returns)

字段名称数据类型说   明
borrow_rec_numint对应借阅记录的编号
return_timedate归还时间
transactorvarchar(20)办理人的用户名
feefloat滞纳/赔偿金额(默认空)
kindvarchar(5)归还的类型(正常、丢失、损坏)

上述表已经优化到BC范式,没有插入删除更新异常。

根据E-R图的实体联系,关于图书管理员管理书籍,读者不会关心书籍是哪个管理员添加的,书籍被删也只会知道没有这本书,位置变了读者也不知道,而对管理员来说,也不关心这些记录,所以我们没必要将这些记录存储,需要查询时由系统管理员导出日志就可以了。

读者提交意见反馈形成一条记录,管理员处理意见反馈形成一条记录。

读者提交借书请求,由管理员代理执行形成一条记录。

读者提交还书请求,由管理员代理执行形成一条记录。

4.2 视图的设计

表18 视图定义

视图名作用
读者用户信息读者查询个人信息的返回结果
图书管理员用户信息图书管理员查询个人信息的返回结果
反馈结果信息读者或管理员查询反馈的处理结果
归还信息读者或管理员查询借阅归还记录的返回结果
图书信息(book_message)读者或管理员查询图书记录的返回结果(同books)

表19 读者用户信息视图(reader_message)

字段名称说    明所来自的基本表的字段
reader_name读者用户名readers.reader_name
name读者姓名readers.name
id_num身份证号码readers.id_num
age年龄当前时间减去身份证的出生日期
phone_num手机号readers.phone_num

表20 图书管理员用户信息视图(manager_message)

字段名称说    明所来自的基本表的字段
manager_name管理员用户名managers.reader_name
name管理员姓名managers.name
age年龄当前时间减去身份证的出生日期
id_num身份证号码managers.id_num
phone_num手机号managers.phone_num
entry_time入职时间managers.entry_time
work_position工作位置managers.work_position

表21 反馈结果信息视图(opinion_result_message)

字段名称说    明所来自的基本表的字段
opinion_rec_num反馈记录编号opinions.rec_num
reader_name提出反馈的读者用户名opinions.reader_name
opinion读者提出的意见文本opinions.opinion
submit_time提交时间opinions.submit_time
state处理状态opinions.state
result处理结果文本opinion_results.result
transactor处理人同户名opinion_results.transactor
finish_time处理完成时间opinion_results.finish_time

表22 归还信息视图(return_message)

字段名称说    明所来自的基本表的字段
borrow_rec_num借阅记录编号borrows.borrow_rec_num
reader_name借阅者用户名borrows.reader_name
book_num被借图书在图书馆的编号borrows.book_num
book_name图书名字books.book_name
borrow_time借阅时间borrows.borrow_time
borrow_transactor借阅办理人的用户名borrows.transactor
borrow_state借阅状态borrows.borrow_state
borrow_duration借阅期限borrows.borrow_duration
return_time归还时间returns.return_time
return_transactor归还办理人的用户名returns.transactor
fee滞纳/赔偿金额returns.fee
kind归还时的类型returns.kind

表23  图书信息视图

字段名称说    明所来自的基本表的字段
book_num图书编号books.bok_num
book_name图书名books.book_name
book_price图书价格books.book_price
book_state图书状态books.book_state
book_position图书位置books.book_position

4.3 完整性的设计

表24 完整性约束

字段名约束类型及描述
readers.reader_name主键
readers.password非空
readers.name非空
readers.id_num候选码,长度15或18位
readers.phone_num空或11位数字
managers.manager_name主键
managers.password非空
managers.name非空
managers.id_num候选码,长度15或18位
managers.phone_num非空,11位数字
managers.entry_time非空
managers.work_position非空
managers.state非空,(正常、注销之一)(默认正常)
books.book_num主键
books.book_name非空
books.book_price非空,非负
books.book_state非空(可借,不可借之一)(默认不可借)
opinions.opinion_rec_num主键
opinions.reader_name外键,参照readers.reader_name
opinions.opinion非空
opinions.submit_time非空
opinions.state非空,(待处理、处理完成其中之一)(默认待处理)
opinion_results.opinion_rec_num主键,外键,参照opinions.opinion_rec_num
opinion_results.result非空
opinion_results.transactor外键,参照managers.manager_name
opinion_results.finish_time非空
borrows.borrow_rec_num主键
borrows.reader_name外键,参照readers.reader_name
borrows.book_num外键,参照books.book_num
borrows.borrow_time非空
borrows.transactor外键,参照managers.manager_name
borrows.borrow_state非空,(已还、未还之一)(默认未还)
borrows.borrow_duration非空(默认30)
returns.borrow_rec_num主键,外键,参照borrows
returns.return_time非空
returns.transactor外键,参照managers.manager_name
returns.kind非空,(正常、丢失、损坏之一)(默认正常)

表25 触发器

触发器名作用
insert_opinion_resultsafter insert 触发器,opinion_results表,插入数据后,将opinions表对应记录的state置为’处理完成’
insert_borrowsafter insert 触发器,borrows表,插入数据后,将books表对应记录的book_state置为’不可借’
insert_booksbefore insert 触发器,books表,,如果要插入数据book_position字段不为空,将book_state置为’可借’
update_booksafter update 触发器,books表,修改数据后,如果是添加馆藏位置,将book_state置为’可借’

4.4 存储过程设计

表26 存储过程

存储过程名作用
insert_reader注册验证通过后插入读者信息,无返回值 参数(用户名,密码md5,姓名,身份证号,手机号)
insert_manager注册验证通过后插入图书管理员信息,无返回值 参数(用户名,密码md5,姓名,身份证号,手机号,入职时间,工作位置)
insert_opinion意见反馈模块插入意见反馈记录,无返回值 参数(用户名,意见,当前时间)
insert_book插入图书记录,无返回值 参数(书籍名字,书籍价格,馆藏位置)
insert_opinion_result管理员处理完成后插入意见处理结果记录,无返回值 参数(被处理的记录的编号,意见处理结果文本,处理人的用户名,当前时间)
insert_borrow管理员代理用户执行图书借阅,插入借阅记录,无返回值 参数(借阅者用户名,被借图书在图书馆的编号,当前时间,办理人的用户名)
insert_return管理员代理用户执行图书归还,插入归还记录,返回值为滞纳金额 参数(对应借阅记录的编号,当前时间,办理人的用户名,类型)
select_reader_message查询读者的个人信息,返回外模式(reader_message) 参数(读者用户名)
select_manager_message查询图书管理员的个人信息,返回外模式(manager_message) 参数(图书管理员用户名)
select_book_message查询图书信息,返回图书信息(book_message) 参数(书籍名)
select_book_by_num查询图书信息,返回图书信息(book_message) 参数(书籍编号)
select_pending_opinion查询待处理的意见,返回待处理意见信息(pending_opinion_message) 参数()
select_opinion查询意见的主要信息,返回内容和状态 参数(意见编号)
select_opinion_result_message查询反馈记录,返回反馈结果信息(opinion_result_message) 参数(读者用户名)
select_return_message查询借阅归还记录,返回借阅归还信息(return_message) 参数(读者用户名)
select_borrow_by_booknum查询借阅归还记录,返回借阅归还信息(return_message) 参数(借阅记录编号)
update_reader_message修改读者个人信息,无返回值 参数(读者用户名,新姓名,新身份证,新电话)
update_reader_password修改读者个人密码,无返回值 参数(读者用户名,新密码的md5)
update_manager_message修改图书管理员个人信息,无返回值 参数(管理员用户名,新姓名,新身份证,新电话)
update_manager_password修改图书管理员个人密码,无返回值 参数(管理员用户名,新密码的md5)
update_manager_work系统管理员修改图书管理员的工作信息,无返回值 参数(管理员用户名,新工作位置,新账户状态)
update_book修改图书信息,无返回值 参数(图书编号,新书籍名字,新书籍价格,新书籍状态,新馆藏位置)
delete_book删除图书,无返回值 参数(图书编号)
delete_manager删除图书管理员账户,无返回值 参数(图书管理员用户名)
extend_time延长借阅时间,返回操作结果(成功/超期) 参数(图书编号)
check_reader检查读者用户密码,返回结果(正确/错误) 参数(用户名,密码md5)
check_manager检查图书管理员用户密码,返回结果(正确/错误) 参数(用户名,密码md5)
check_reader_sign_up检查读者注册信息,返回结果(用户名已存在/身份证号已被注册/OK) 参数(用户名,身份证号)
check_manager_sign_up检查图书管理员注册信息,返回结果(用户名已存在/身份证号已被注册/OK) 参数(用户名,身份证号)

至此数据库基本设计完成,之后是使用数据库产品进行实现

68747470733a2f:2f626c6f672e6373646e2e6e65742f6173733133333735352f:61727469636c652f64657461696c732f313238363431393030