图书管理系统数据库设计-MYSQL实现

更新时间:2023-09-02 03:03:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

这是一个简单的图书管理系统的MYSQL设计,包含了数据插入,删除,定时器,触发器设计

图书管理系统数据库设计

一、系统概述

1、系统简介

图书管理是每个图书馆都需要进行的工作。一个设计良好的图书管理系统数据库能够给图书管理带来很大的便利。

2、需求分析

图书管理系统的需求定义为:

1.学生可以直接通过借阅终端来查阅书籍信息,同时也可以查阅自己的借阅信息。

2.当学生需要借阅书籍时,通过账号密码登陆借阅系统,借阅系统处理学生的借阅,同时修改图书馆保存的图书信息,修改被借阅的书籍是否还有剩余,同时更新学生个人的借阅信息。

3.学生借阅图书之前需要将自己的个人信息注册,登陆时对照学生信息。

4.学生直接归还图书,根据图书编码修改借阅信息

5.管理员登陆管理系统后,可以修改图书信息,增加或者删除图书信息

6.管理员可以注销学生信息。

通过需求定义,画出图书管理系统的数据流图:

1

这是一个简单的图书管理系统的MYSQL设计,包含了数据插入,删除,定时器,触发器设计

数据流图

2

这是一个简单的图书管理系统的MYSQL设计,包含了数据插入,删除,定时器,触发器设计

三、数据库设计方案图表

1、系统E-R模型

总体E-R图:

3

这是一个简单的图书管理系统的MYSQL设计,包含了数据插入,删除,定时器,触发器设计

4

这是一个简单的图书管理系统的MYSQL设计,包含了数据插入,删除,定时器,触发器设计

给出设计的表名、结构以及表上设计的完整性约束。student:

5

这是一个简单的图书管理系统的MYSQL设计,包含了数据插入,删除,定时器,触发器设计

book:

book_sort:

borrow:存储学生的借书信息

return_table:存储学生的归还信息

6

这是一个简单的图书管理系统的MYSQL设计,包含了数据插入,删除,定时器,触发器设计

ticket:存储学生的罚单信息

manager:

3、设计索引

给出在各表上建立的索引以及使用的语句。student:

7

这是一个简单的图书管理系统的MYSQL设计,包含了数据插入,删除,定时器,触发器设计

1.为stu_id创建索引,升序排序

sql:create index index_id on student(stu_id asc);

2.为stu_name创建索引,并且降序排序

sql:alter table student add index index_name(stu_name, desc);

插入索引操作和结果如下所示:

mysql> create index index_id on student(stu_id asc);

Query OK, 0 rows affected

Records: 0 Duplicates: 0 Warnings: 0

mysql> alter table student add index index_name(stu_name desc); Query OK, 0 rows affected

Records: 0 Duplicates: 0 Warnings: 0

mysql>

book:

1.为book_id创建索引,升序排列

sql:create index index_bid on book(book_id);

2.为book_record创建索引,以便方便查询图书的登记日期信息,升序:sql:create index index_brecord on book(book_record);

8

这是一个简单的图书管理系统的MYSQL设计,包含了数据插入,删除,定时器,触发器设计

插入索引的操作和结果如下所示:

mysql> create index index_bid on book(book_id);

Query OK, 0 rows affected

Records: 0 Duplicates: 0 Warnings: 0

mysql> create index index_brecord on book(book_record);

Query OK, 0 rows affected

Records: 0 Duplicates: 0 Warnings: 0

borrow:

1.为stu_id和book_id创建多列索引:

sql:create index index_sid_bid on borrow(stu_id asc, book_id asc);

插入索引的操作和结果如下所示:

mysql> create index index_sid_bid on borrow(stu_id asc, book_id asc); Query OK, 0 rows affected

Records: 0 Duplicates: 0 Warnings: 0

return_table:

1.为stu_id和book_id创建多列索引:

9

这是一个简单的图书管理系统的MYSQL设计,包含了数据插入,删除,定时器,触发器设计

sql:create index index_sid_bid on return_table(stu_id asc, book_id asc);

插入索引的操作和结果如下所示:

mysql> create index index_sid_bid_r on return_table(stu_id asc, book_id asc); Query OK, 0 rows affected

Records: 0 Duplicates: 0 Warnings: 0

ticket:

1. 为stu_id和book_id创建多列索引:

sql:create index index_sid_bid on ticket(stu_id asc, book_id asc);

插入索引的操作和结果如下所示:

mysql> create index index_sid_bid on ticket(stu_id asc, book_id asc); Query OK, 0 rows affected

Records: 0 Duplicates: 0 Warnings: 0

manager:

1.为manager_id创建索引:

sql:create index index_mid on manager(manager_id);

插入索引的操作和结果如下所示:

10

这是一个简单的图书管理系统的MYSQL设计,包含了数据插入,删除,定时器,触发器设计

mysql> create index index_mid on manager(manager_id); Query OK, 0 rows affected

Records: 0 Duplicates: 0 Warnings: 0

4、设计视图

给出在各表上建立的视图以及使用的语句。

1.在表student上创建计算机专业(cs)学生的视图stu_cs:sql: create view stu_cs as

select *

from student

where pro = ‘cs’;

操作和结果:

mysql> create view stu_cs as

select *

from student

where stu_pro = 'cs';

Query OK, 0 rows affected

11

这是一个简单的图书管理系统的MYSQL设计,包含了数据插入,删除,定时器,触发器设计

2. 在表student, borrow和book上创建借书者的全面信息视图stu_borrow:

sql: create view stu_borrow as

select student.stu_id, book.book_id, student.stu_name, book.book_name, borrow_date,adddate(borrow_date,30) expect_return_date

from student, book, borrow

where student.stu_id = borrow.stu_id and book.book_id = borrow.book_id;

操作和结果:

mysql> create view stu_borrow as

select student.stu_id, book.book_id, student.stu_name, book.book_name, borrow_date,adddate(borrow_date,30) expect_return_date

from student, book, borrow

where student.stu_id = borrow.stu_id and book.book_id = borrow.book_id;

Query OK, 0 rows affected

3.创建类别1的所有图书的视图cs_book:

sql: create view cs_book as

select *

from book

12

这是一个简单的图书管理系统的MYSQL设计,包含了数据插入,删除,定时器,触发器设计

where book.book_sort in

(select book_http://www.77cn.com.cn

from book_sort

where sort_id = 1);

操作和结果显示:

mysql> create view cs_book as

select *

from book

where book.book_sort in

(select book_sort.sort_name

from book_sort

where sort_id = 1);

Query OK, 0 rows affected

4.创建个人所有借书归还纪录视图stu_borrow_return: sql:

create view stu_borrow_return as

13

这是一个简单的图书管理系统的MYSQL设计,包含了数据插入,删除,定时器,触发器设计

select student.stu_id, student.stu_name, book.book_id, book.book_name,return_table.borrow_date,return_table.return_date

from student, book, return_table

where student.stu_id = return_table.stu_id and book.book_id = return_table.book_id;

5、设计触发器

给出在各表上建立的触发器以及使用的语句。

1.设计触发器borrow, 当某学生借书成功后,图书表相应的图书不在架上,变为0:

sql:

create trigger borrow

after insert on borrow

for each row

begin

update book set book_num = book_num – 1

where book_id = new.book_id;

end

操作与结果显示:

mysql> delimiter $$

mysql> create trigger trigger_borrow

-> after insert on borrow

14

这是一个简单的图书管理系统的MYSQL设计,包含了数据插入,删除,定时器,触发器设计

-> for each row

-> begin

-> update book set book_num = book_num - 1

-> where book_id = new.book_id;

-> end

-> $$

Query OK, 0 rows affected

在插入表borrow之前,book_id = 1 的图书还在架上,为1:

学生1借了这本书后,在borrow中插入了一条记录:

在borrow中插入这条记录后,book_id =1的图书,不在架上,为0:

2.设计触发器trigger_return,还书成功后,对应的书籍book_num变为1:sql:

create trigger trigger_return

after insert on return_table

for each row

begin

update book set book_num = book_num + 1

15

这是一个简单的图书管理系统的MYSQL设计,包含了数据插入,删除,定时器,触发器设计

where book_id = new.book_id;

end

还书时在return_table插入表项:

此时图书归还架上:

3.定义定时器(事件)eventJob,每天自动触发一次,扫描视图stu_borrow,若发现当前有预期归还时间小于当前时间,则判断为超期,生成处罚记录,这个定时器将每天定时触发存储过程proc_gen_ticket:

sql:

create event if not exists eventJob

on schedule every 1 DAY /*每天触发*/

on completion PRESERVE

do call proc_gen_ticket(getdate()); /*调用存储过程*/

set global event_scheduler = 1;

alter event eventJob on completion preserve enable; /*开启定时器*/

操作和结果显示:

1). 学生1借了图书1,生成借书记录stu_borrow视图,如下:

2). 当他在1月27日前还书时,没有生成罚单:

16

这是一个简单的图书管理系统的MYSQL设计,包含了数据插入,删除,定时器,触发器设计

3). 当他在1月27日后还书时,生成罚单:

4.设计触发器trigger_credit,若处罚记录超过30条,则将这个学生的诚信级设置为0,下次不允许借书:

sql:

create trigger trigger_credit

after insert on ticket

for each row

begin

if (select count(*) from ticket where stu_id=new.stu_id)>30 then

update student set stu_integrity = 0 where stu_id = new.stu_id;

end if;

end

操作和结果显示,测试时选择插入ticket项大于3,因为30太大了,不容易测试:

学生1超过3次超期归还图书后,产生了4条罚单:

17

这是一个简单的图书管理系统的MYSQL设计,包含了数据插入,删除,定时器,触发器设计

此时触动触发器trigger_credit,将学生1的诚信级设置为0:

四、应用程序设计与编码实现

1、系统实现中存储函数和存储过程的设计

要求给出功能描述和代码。

1. 设计存储过程,产生罚单proc_gen_ticket:

当日期超过预定归还日期时,产生罚单,并将记录写入表ticket中,这个存储过程在定时器eventJob中调用:

sql:

create procedure proc_gen_ticket(in currentdate datetime)

BEGIN

declare cur_date datetime;

set cur_date = currentdate;

18

这是一个简单的图书管理系统的MYSQL设计,包含了数据插入,删除,定时器,触发器设计

replace into ticket(stu_id, book_id, over_date, ticket_fee)

select stu_id, book_id, datediff(cur_date,stu_borrow.expect_return_date),0.1*datediff(cur_date,stu_borrow.exp ect_return_date)

from stu_borrow

where cur_date>stu_borrow.expect_return_date;

end

操作和结果显示:

1). 学生1借了图书1,生成借书记录stu_borrow视图,如下:

2). 当他在1月27日前还书时,没有生成罚单:

3). 当他在1月27日后还书时,生成罚单:

2.设计学生注册信息存储过程:学生注册信息stu_register

sql:

19

本文来源:https://www.bwwdw.com/article/zrbi.html

Top