If it is helpful to you, you can leave a like, follow, bookmark for the humble blogger (not)
(Cheat about the data, maybe the interview will pass in the future, thank you)
The first part of the library management system, database analysis.
Mainly requirements analysis, design outline module, database conceptual structure design (ER diagram), database logical structure design (table, stored procedure, trigger)
Table of contents
2. System outline module design
3. Database conceptual structure design (ER diagram)
4. Database logical structure design
1. Demand analysis
1.1 Data Flow Diagram
1.1 Top-level data flow diagram
Based on the preliminary requirements analysis results of the library management information system, its top-level data flow diagram is shown in Figure 1:
Users interact with the system through the terminal. Common readers, librarians, and system administrators can all use the terminal, but their account permissions are different, and the operations they can perform after successful login are different. The result of the interaction will be shown on the monitor as a graphical interface.
1.1.2 First-level data flow diagram
The first-level data flow diagram is shown in Figure 2:
1.1.3 Data flow diagram of each module
The data flow diagram of each functional module is shown in Figure 3:
1.2 Data Dictionary
Table 1 Reader registration information data dictionary
name: |
Reader registration information |
Alias: |
|
describe: |
When the user registers, the personal information entered is aggregated into a class (reader) |
definition: |
Username + name + password md5 + ID card + phone |
Location: |
Write to the database readers table |
Table 2 Reader user information data dictionary
name: |
Reader User Information |
Alias: |
|
describe: |
User query personal information |
definition: |
Username + name + age + ID card + phone |
Location: |
Reader personal information query results |
Table 3 Librarian registration information data dictionary
name: |
Librarian Registration Information |
Alias: |
|
describe: |
Librarian account information, inserted by the system administrator |
definition: |
Username + name + password md5 + ID card + phone number + entry time + work location + account status |
Location: |
Write to the database managers table |
Table 4 Librarian user information data dictionary
name: |
Librarian User Information |
Alias: |
|
describe: |
Librarian inquiries for personal information |
definition: |
Username + name + age + ID card + phone number + entry time + work location |
Location: |
Librarian personal information query results |
Table 5 Book Information Data Dictionary
name: |
book information |
Alias: |
|
describe: |
Information about books in the collection |
definition: |
Book number + book name + price + status + collection location |
Location: |
Book information query returns results, database books table |
Table 6 Opinion Data Data Dictionary
name: |
opinion data |
Alias: |
|
describe: |
A record formed after the comments submitted by the user are processed and stored in the database |
definition: |
Comment record number + submitter username + comment submitted by the user (text) + time + processing status |
Location: |
Database opinions table, feedback processing interface |
Table 7 Data Dictionary of Opinion Processing Results
name: |
Opinion Processing Results |
Alias: |
|
describe: |
For the opinions submitted by users, the librarian will process them and give the results, and then be packaged into a record by the opinion processing module and stored in the database |
definition: |
Opinion record number + processing result (text) + processor username + time |
Location: |
Database opinion_results table |
Table 8 Feedback result data dictionary
name: |
Feedback result |
Alias: |
|
describe: |
Feedback that is processed, queries show natural connections between opinion data and opinion processing results |
definition: |
Reference opinion data and opinion processing results |
Location: |
Feedback records query results |
Table 9 Borrowing record data dictionary
name: |
borrowing record |
Alias: |
|
describe: |
Records formed by readers borrowing books |
definition: |
Borrowing record number + reader user name + book number + time + handler user name + status + available borrowing time |
Location: |
database borrows table |
表10 归还记录数据字典
名字: |
归还记录 |
别名: |
|
描述: |
读者归还所借书籍形成的记录 |
定义: |
借阅记录号+归还时间+办理人用户名+滞纳金额+类型 |
位置: |
数据库returns表 |
1.3 系统流程分析
用户先进行选择,经过注册后登录系统,或者使用已有账号登录系统。进入用户操作界面,普通读者、图书管理员、系统管理员有各自可以执行的操作。选择某个操作后,系统执行并输出结果到显示器。系统流程图如图4:
2. 系统概要模块设计
通过对图书馆管理信息系统的分析,定义出系统模块设计图如图5:
其中定义的功能模块包括以下方面:
注册模块:进入系统前需要登录,没有账号就需要注册账号。填写用户名,姓名,密码以及身份证,手机号。验证通过即可注册成功。该模块注册只能获得读者账号。
登录模块:用户输入用户名,密码,经过系统验证通过后可以进入系统操作界面。不同类别的用户都可以使用此模块,但是进入的操作界面功能不同。
用户操作模块:登录成功后,进入此模块。分3类用户:
第一类是读者,读者账户可以进行的操作有个人信息查询修改、书籍信息查询、意见反馈、借阅记录查询、反馈记录查询;
第二类是图书管理员,图书管理员账户可以进行的操作有个人信息查询修改、书籍信息查询、图书管理、意见反馈处理、图书借阅、图书归还、借阅延期、借阅记录查询、反馈记录查询,归还记录查询;
第三类是系统管理员,系统管理员账户可以进行的操作是管理图书管理员账户,他只进行图书管理员的查询、添加、修改、删除。对于图书的处理,由图书管理员进行。
3. 数据库概念结构设计(E-R图)
E-R图 如图6:
图书管理员账户由系统管理员创建并管理,一个系统管理员创建多个图书管理员,之后图书馆由图书管理员进行管理,但是不关心图书管理员是被谁创建。读者可以进行登录,然后在用户终端查询和修改个人信息,查询图书信息,借阅记录,提交反馈,查询反馈结果,这些是个人可以完成的,由系统去查询数据库并返回结果给用户;读者进行借书和还书需要图书管理员帮助。总体上说,一个图书管理员可以服务多名读者,一名读者可以被多个图书管理员服务,具体的,一名读者可以同时借多本书,一本书同时只能被一名读者借,每一本书借书过程只能由一个图书管理员负责。一本书还书过程由一个图书管理员负责,这样形成借阅表和归还表。一名读者可以提交多条反馈记录,一个图书管理员可以处理多条反馈记录,而一条反馈记录只由一个图书管理员处理,形成意见反馈表和反馈结果表。而图书管理员对图书的增删改查我们也不关心,不成为表。
4. 数据库逻辑结构设计
4.1 基本表设计
读者用户表 ,存放已注册读者用户的账户信息
表11 读者用户表(readers)
字段名称 |
数据类型 |
说 明 |
reader_name |
varchar(20) |
用户名(账号) |
password |
varchar(35) |
密码md5 |
name |
varchar(10) |
姓名 |
id_num |
varchar(20) |
身份证号 |
phone_num |
varchar(15) |
手机号 |
图书管理员用户表,存放所有图书管理员的账户信息
表12 图书管理员用户表(managers)
字段名称 |
数据类型 |
说 明 |
manager_name |
varchar(20) |
用户名(账号) |
password |
varchar(35) |
密码md5 |
name |
varchar(10) |
姓名 |
id_num |
varchar(20) |
身份证号 |
phone_num |
varchar(15) |
手机号 |
entry_time |
date |
入职时间 |
work_position |
varchar(20) |
工作位置 |
state |
varchar(5) |
账户状态(正常、注销之一)(默认正常) |
意见反馈表,存放用户的意见反馈形成的记录
表13 意见反馈表(opinions)
字段名称 |
数据类型 |
说 明 |
opinion_rec_num |
int |
反馈记录的编号 |
reader_name |
varchar(20) |
提交者用户名 |
opinion |
varchar(100) |
反馈意见文本 |
submit_time |
date |
意见提交时间 |
state |
varchar(10) |
处理状态(待处理、处理完成)(默认待处理) |
书籍信息表, 图书馆藏书的信息
表14 书籍信息表(books)
字段名称 |
数据类型 |
说 明 |
book_num |
int |
图书在图书馆的编号 |
book_name |
varchar(30) |
书籍名字 |
book_price |
float |
书籍价格 |
book_state |
varchar(10) |
书籍状态(可借,不可借) (默认不可借) |
book_position |
varchar(30) |
馆藏位置(刚添加时暂时为空) |
意见处理结果表, 意见处理完成后,结果存入此表。
表15 意见处理结果表(opinion_results)
字段名称 |
数据类型 |
说 明 |
opinion_rec_num |
int |
被处理的记录的编号 |
result |
varchar(100) |
意见处理结果文本 |
transactor |
Varchar(20) |
处理人的用户名,是一个图书管理员 |
finish_time |
date |
处理完成时间 |
借阅记录表, 读者借阅书籍形成的记录
表16 借阅记录表(borrows)
字段名称 |
数据类型 |
说 明 |
borrow_rec_num |
int |
借阅记录的编号 |
reader_name |
varchar(20) |
借阅者用户名 |
book_num |
int |
被借图书在图书馆的编号 |
borrow_time |
date |
借阅时间 |
transactor |
varchar(20) |
办理人的用户名 |
borrow_state |
varchar(10) |
借阅状态(已还,待还) |
borrow_duration |
smallint |
允许借阅时长(天)(默认30) |
归还记录表 , 读者归还书籍形成的记录
表17 归还记录表(returns)
字段名称 |
数据类型 |
说 明 |
borrow_rec_num |
int |
对应借阅记录的编号 |
return_time |
date |
归还时间 |
transactor |
varchar(20) |
办理人的用户名 |
fee |
float |
滞纳/赔偿金额(默认空) |
kind |
varchar(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_results |
after insert 触发器,opinion_results表,插入数据后,将opinions表对应记录的state置为’处理完成’ |
insert_borrows |
after insert 触发器,borrows表,插入数据后,将books表对应记录的book_state置为’不可借’ |
insert_books |
before insert 触发器,books表,,如果要插入数据book_position字段不为空,将book_state置为’可借’ |
update_books |
after 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) 参数(用户名,身份证号) |
至此数据库基本设计完成,之后是使用数据库产品进行实现