图书管理系统数据库设计MYSQL实现 2.docx
《图书管理系统数据库设计MYSQL实现 2.docx》由会员分享,可在线阅读,更多相关《图书管理系统数据库设计MYSQL实现 2.docx(6页珍藏版)》请在冰豆网上搜索。
图书管理系统数据库设计MYSQL实现2
图书管理系统数据库设计-MYSQL实现
(2)
图书管理系统数据库设计
一、系统概述
1、系统简介
图书管理是每个图书馆都需要进行的工作。
一个设计良好的图书管理系统数据库能够给图书管理带来很大的便利。
2、需求分析
图书管理系统的需求定义为:
1.学生可以直接通过借阅终端来查阅书籍信息,同时也可以查阅自己的借阅信息。
2.当学生需要借阅书籍时,通过账号密码登陆借阅系统,借阅系统处理学生的借阅,同时修改图书馆保存的图书信息,修改被借阅的书籍是否还有剩余,同时更新学生个人的借阅信息。
3.学生借阅图书之前需要将自己的个人信息注册,登陆时对照学生信息。
4.学生直接归还图书,根据图书编码修改借阅信息
5.管理员登陆管理系统后,可以修改图书信息,增加或者删除图书信息
6.管理员可以注销学生信息。
通过需求定义,画出图书管理系统的数据流图:
数据流图
二、系统功能设计
画出系统功能模块图并用文字对各功能模块进行详细介绍。
系统功能模块图:
三、数据库设计方案图表
1、系统E-R模型
总体E-R图:
精细化的局部E-R图:
学生借阅-归还E-R图:
管理员E-R图:
2、设计表
给出设计的表名、结构以及表上设计的完整性约束。
student:
book:
book_sort:
borrow:
存储学生的借书信息
return_table:
存储学生的归还信息
ticket:
存储学生的罚单信息
manager:
3、设计索引
给出在各表上建立的索引以及使用的语句。
student:
1.为stu_id创建索引,升序排序
sql:
createindexindex_idonstudent(stu_idasc);
2.为stu_name创建索引,并且降序排序
sql:
altertablestudentaddindexindex_name(stu_name,desc);
插入索引操作和结果如下所示:
mysql>createindexindex_idonstudent(stu_idasc);
QueryOK,0rowsaffected
Records:
0Duplicates:
0Warnings:
0
mysql>altertablestudentaddindexindex_name(stu_namedesc);QueryOK,0rowsaffected
Records:
0Duplicates:
0Warnings:
0
mysql>
book:
1.为book_id创建索引,升序排列
sql:
createindexindex_bidonbook(book_id);
2.为book_record创建索引,以便方便查询图书的登记日期信息,升序:
sql:
createindexindex_brecordonbook(book_record);
插入索引的操作和结果如下所示:
mysql>createindexindex_bidonbook(book_id);
QueryOK,0rowsaffected
Records:
0Duplicates:
0Warnings:
0
mysql>createindexindex_brecordonbook(book_record);
QueryOK,0rowsaffected
Records:
0Duplicates:
0Warnings:
0
borrow:
1.为stu_id和book_id创建多列索引:
sql:
createindexindex_sid_bidonborrow(stu_idasc,book_idasc);
插入索引的操作和结果如下所示:
mysql>createindexindex_sid_bidonborrow(stu_idasc,book_idasc);
QueryOK,0rowsaffected
Records:
0Duplicates:
0Warnings:
0
return_table:
1.为stu_id和book_id创建多列索引:
sql:
createindexindex_sid_bidonreturn_table(stu_idasc,book_idasc);
插入索引的操作和结果如下所示:
mysql>createindexindex_sid_bid_ronreturn_table(stu_idasc,book_idasc);
QueryOK,0rowsaffected
Records:
0Duplicates:
0Warnings:
0
ticket:
1.为stu_id和book_id创建多列索引:
sql:
createindexindex_sid_bidonticket(stu_idasc,book_idasc);
插入索引的操作和结果如下所示:
mysql>createindexindex_sid_bidonticket(stu_idasc,book_idasc);
QueryOK,0rowsaffected
Records:
0Duplicates:
0Warnings:
0
manager:
1.为manager_id创建索引:
sql:
createindexindex_midonmanager(manager_id);
插入索引的操作和结果如下所示:
mysql>createindexindex_midonmanager(manager_id);
QueryOK,0rowsaffected
Records:
0Duplicates:
0Warnings:
0
4、设计视图
给出在各表上建立的视图以及使用的语句。
1.在表student上创建计算机专业(cs)学生的视图stu_cs:
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(borrow_date,30)expect_return_date
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(borrow_date,30)expect_return_date
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
(selectbook_sort.sort_name
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_datefromstudent,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: