图书管理系统数据库设计MYSQL实现.docx
- 文档编号:26438894
- 上传时间:2023-06-19
- 格式:DOCX
- 页数:18
- 大小:20.21KB
图书管理系统数据库设计MYSQL实现.docx
《图书管理系统数据库设计MYSQL实现.docx》由会员分享,可在线阅读,更多相关《图书管理系统数据库设计MYSQL实现.docx(18页珍藏版)》请在冰豆网上搜索。
图书管理系统数据库设计MYSQL实现
图书管理系统数据库设计
一、系统概述
1、系统简介
图书管理是每个图书馆都需要进行的工作。
一个设计良好的图书管理系统数据库能够给图书管理带来很大的便利。
2、需求分析
图书管理系统的需求定义为:
1.学生可以直接通过借阅终端来查阅书籍信息,同时也可以查阅自己的借阅信息。
2.当学生需要借阅书籍时,通过账号密码登陆借阅系统,借阅系统处理学生的借阅,同时修改图书馆保存的图书信息,修改被借阅的书籍是否还有剩余,同时更新学生个人的借阅信息。
3.学生借阅图书之前需要将自己的个人信息注册,登陆时对照学生信息。
4.学生直接归还图书,根据图书编码修改借阅信息
5.管理员登陆管理系统后,可以修改图书信息,增加或者删除图书信息
6.管理员可以注销学生信息。
通过需求定义,画出图书管理系统的数据流图:
数据流图
二、系统功能设计
画出系统功能模块图并用文字对各功能模块进行详细介绍。
系统功能模块图:
三、数据库设计方案图表
1、系统E-R模型
总体E-R图:
精细化的局部E-R图:
学生借阅-归还E-R图:
管理员E-R图:
2、设计表
给出设计的表名、结构以及表上设计的完整性约束。
student:
列名
数据类型
是否为空/性质
说明
stu_id
int
notnull/PK
标明学生唯一学号
stu_name
varchar
notnull
学生姓名
stu_sex
varchar
notnull
学生性别
stu_age
int
notnull
学生年龄
stu_pro
varchar
notnull
学生专业
stu_grade
varchar
notnull
学生年级
stu_integrity
int
notnull/default=1
学生诚信级
book:
列名
数据类型
是否为空/性质
说明
book_id
int
notnull/PK
唯一书籍序号
book_name
varchar
notnull
书籍名称
book_author
varchar
notnull
书籍作者
book_pub
varchar
notnull
书籍出版社
book_num
int
notnull
书籍是否在架上
book_sort
varchar
notnull
书籍分类
book_record
datatime
null
书籍登记日期
book_sort:
列名
数据类型
是否为空/性质
说明
sort_id
varchar
notnull/PK
类型编号
sort_name
varchar
notnull
类型名称
borrow:
存储学生的借书信息
列名
数据类型
是否为空/性质
说明
student_id
varchar
notnull/PK
学生编号
book_id
varchar
notnull/PK
书籍编号
borrow_date
datatime
null
借书时间
expect_return_date
datetime
null
预期归还时间
return_table:
存储学生的归还信息
列名
数据类型
是否为空/性质
说明
student_id
varchar
notnull/PK
学生编号
book_id
varchar
notnull/PK
书籍编号
borrow_date
datetime
null
借书时间
return_date
datatime
null
实际还书时间
ticket:
存储学生的罚单信息
列名
数据类型
是否为空/性质
说明
student_id
varchar
notnull/PK
学生编号
book_id
varchar
notnull/PK
书籍编号
over_date
int
null
超期天数
ticket_fee
float
null
处罚金额
manager:
列名
数据类型
是否为空/性质
说明
manager_id
varchar
notnull/PK
管理员编号
manager_name
varchar
notnull
管理员姓名
manager_age
varchar
notnull
管理员年龄
manager_phone
varchar
notnull
管理员电话
3、设计索引
给出在各表上建立的索引以及使用的语句。
student:
1.为stu_id创建索引,升序排序
sql:
createindexindex_idonstudent
2.为stu_name创建索引,并且降序排序
sql:
altertablestudentaddindexindex_name
插入索引操作和结果如下所示:
mysql>createindexindex_idonstudent
QueryOK,0rowsaffected
Records:
0Duplicates:
0Warnings:
0
mysql>altertablestudentaddindexindex_name
QueryOK,0rowsaffected
Records:
0Duplicates:
0Warnings:
0
mysql>
book:
1.为book_id创建索引,升序排列
sql:
createindexindex_bidonbook
2.为book_record创建索引,以便方便查询图书的登记日期信息,升序:
sql:
createindexindex_brecordonbook
插入索引的操作和结果如下所示:
mysql>createindexindex_bidonbook
QueryOK,0rowsaffected
Records:
0Duplicates:
0Warnings:
0
mysql>createindexindex_brecordonbook
QueryOK,0rowsaffected
Records:
0Duplicates:
0Warnings:
0
borrow:
1.为stu_id和book_id创建多列索引:
sql:
createindexindex_sid_bidonborrow
插入索引的操作和结果如下所示:
mysql>createindexindex_sid_bidonborrow
QueryOK,0rowsaffected
Records:
0Duplicates:
0Warnings:
0
return_table:
1.为stu_id和book_id创建多列索引:
sql:
createindexindex_sid_bidonreturn_table
插入索引的操作和结果如下所示:
mysql>createindexindex_sid_bid_ronreturn_table
QueryOK,0rowsaffected
Records:
0Duplicates:
0Warnings:
0
ticket:
1.为stu_id和book_id创建多列索引:
sql:
createindexindex_sid_bidonticket
插入索引的操作和结果如下所示:
mysql>createindexindex_sid_bidonticket
QueryOK,0rowsaffected
Records:
0Duplicates:
0Warnings:
0
manager:
1.为manager_id创建索引:
sql:
createindexindex_midonmanager
插入索引的操作和结果如下所示:
mysql>createindexindex_midonmanager
QueryOK,0rowsaffected
Records:
0Duplicates:
0Warnings:
0
4、设计视图
给出在各表上建立的视图以及使用的语句。
1.在表student上创建计算机专业
sql:
createviewstu_csas
select*
fromstudent
wherepro=‘cs’;
操作和结果:
mysql>createviewstu_csas
select*
fromstudent
wherestu_pro='cs';
QueryOK,0rowsaffected
2.在表student,borrow和book上创建借书者的全面信息视图stu_borrow:
sql:
createviewstu_borrowas
selectstudent.stu_id,book.book_id,student.stu_name,book.book_name,borrow_date,adddate
fromstudent,book,borrow
wherestudent.stu_id=borrow.stu_idandbook.book_id=borrow.book_id;
操作和结果:
mysql>createviewstu_borrowas
selectstudent.stu_id,book.book_id,student.stu_name,book.book_name,borrow_date,adddate
fromstudent,book,borrow
wherestudent.stu_id=borrow.stu_idandbook.book_id=borrow.book_id;
QueryOK,0rowsaffected
3.创建类别1的所有图书的视图cs_book:
sql:
createviewcs_bookas
select*
frombook
wherebook.book_sortin
frombook_sort
wheresort_id=1>;
操作和结果显示:
mysql>createviewcs_bookas
select*
frombook
wherebook.book_sortin
frombook_sort wheresort_id=1>; QueryOK,0rowsaffected 4.创建个人所有借书归还纪录视图stu_borrow_return: sql: createviewstu_borrow_returnas selectstudent.stu_id,student.stu_name,book.book_id,book.book_name,return_table.borrow_date,return_table.return_date fromstudent,book,return_table wherestudent.stu_id=return_table.stu_idandbook.book_id=return_table.book_id; 5、设计触发器 给出在各表上建立的触发器以及使用的语句。 1.设计触发器borrow,当某学生借书成功后,图书表相应的图书不在架上,变为0: sql: createtriggerborrow afterinsertonborrow foreachrow begin updatebooksetbook_num=book_num–1 wherebook_id=new.book_id; end 操作与结果显示: mysql>delimiter$$ mysql>createtriggertrigger_borrow ->afterinsertonborrow ->foreachrow ->begin ->updatebooksetbook_num=book_num-1 ->wherebook_id=new.book_id; ->end ->$$ QueryOK,0rowsaffected 在插入表borrow之前,book_id=1的图书还在架上,为1: 学生1借了这本书后,在borrow中插入了一条记录: 在borrow中插入这条记录后,book_id=1的图书,不在架上,为0: 2.设计触发器trigger_return,还书成功后,对应的书籍book_num变为1: sql: createtriggertrigger_return afterinsertonreturn_table foreachrow begin updatebooksetbook_num=book_num+1 wherebook_id=new.book_id; end 还书时在return_table插入表项: 此时图书归还架上: 3.定义定时器〔事件eventJob,每天自动触发一次,扫描视图stu_borrow,若发现当前有预期归还时间小于当前时间,则判断为超期,生成处罚记录,这个定时器将每天定时触发存储过程proc_gen_ticket: sql: createeventifnotexistseventJob onscheduleevery1DAY/*每天触发*/ oncompletionPRESERVE docallproc_gen_ticket setglobalevent_scheduler=1; altereventeventJoboncompletionpreserveenable;/*开启定时器*/ 操作和结果显示: 1>.学生1借了图书1,生成借书记录stu_borrow视图,如下: 2>.当他在1月27日前还书时,没有生成罚单: 3>.当他在1月27日后还书时,生成罚单: 4.设计触发器trigger_credit,若处罚记录超过30条,则将这个学生的诚信级设置为0,下次不允许借书: sql: createtriggertrigger_credit afterinsertonticket foreachrow begin if updatestudentsetstu_integrity=0wherestu_id=new.stu_id; endif; end 操作和结果显示,测试时选择插入ticket项大于3,因为30太大了,不容易测试: 学生1超过3次超期归还图书后,产生了4条罚单: 此时触动触发器trigger_credit,将学生1的诚信级设置为0: 四、应用程序设计与编码实现 1、系统实现中存储函数和存储过程的设计 要求给出功能描述和代码。 1.设计存储过程,产生罚单proc_gen_ticket: 当日期超过预定归还日期时,产生罚单,并将记录写入表ticket中,这个存储过程在定时器eventJob中调用: sql: createprocedureproc_gen_ticket BEGIN declarecur_datedatetime; setcur_date=currentdate; replaceintoticket selectstu_id,book_id,datediff fromstu_borrow wherecur_date>stu_borrow.expect_return_date; end 操作和结果显示: 1>.学生1借了图书1,生成借书记录stu_borrow视图,如下: 2>.当他在1月27日前还书时,没有生成罚单: 3>.当他在1月27日后还书时,生成罚单: 2.设计学生注册信息存储过程: 学生注册信息stu_register sql: createprocedurestu_register begin insertintostudent values end 3.设计管理员注册信息存储过程: ma_register sql: createprocedurema_register BEGIN insertintomanager values END 4.借书过程的实现: 1)设计存储函数,func_get_credit,返回学生的诚信级: createfunctionfunc_get_credit begin return end 2)设计存储函数,func_get_booknum,返回书籍是否在架上: createfunctionfunc_get_booknum begin return end 3)设计存储过程proc_borrow,调用func_get_credit和func_get_booknum,判断这个学生诚信度和书籍是否在架上,若为真,则借书成功,在borrrow表中插入纪录;否则提示失败: createprocedureproc_borrow begin iffunc_get_credit insertintoborrow values else select'failedtoborrow'; endif; end 实验操作与结果显示: borrow纪录为空: 执行函数,学生1借图书2: callproc_borrow<1,2,now<>>; 学生1的诚信级为0: 借书失败: 修改学生1诚信级为1: 此时借书成功: 5.还书存储过程proc_return: 当还书时,查看是否书是否超期,即查询ticket表项,当发现超期,提示交罚单后再次还书,如没有超期,则纪录归还项目到return_table中,并且删除借书纪录〔以免还书后定时器仍然扫描这个纪录: sql: createprocedureproc_return begin DECLAREborrowdatedatetime; if select'pleasepayofftheticket'; else/*纪录归还项目到return_table中,并且删除借书纪录*/ setborrowdate= insertintoreturn_table values deletefromborrow whereborrow.stu_id=stu_idandborrow.book_id=book_id; endif; en
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图书 管理 系统 数据库 设计 MYSQL 实现