MySQL图书管理数据库_管理数据库和用户
项目简介
MySQL图书管理系统是针对学校图书馆、公共图书馆等场景设计的数据管理系统,其主要目的是通过存储过程封装数据更新功能,实现图书的借书、还书功能,并记录人员操作信息,本文将详细介绍该系统的需求分析、数据库表设计、存储过程创建与测试等内容。
项目分析
1. 需求分析
根据图书管理系统的功能要求,系统需要实现以下几项主要功能:
图书管理功能:包括书籍的借出和归还,判断书籍库存情况,更新图书数据。
信息操作功能:记录借书人员的操作信息,包括图书租借信息。
人员管理功能:主要面向学校图书馆,实现学生的信息管理,图书馆仅对学校的学生和老师开放,不对普通员工开放。
2. 需求表信息分析
为了实现上述功能,我们需要设计几张主要的数据库表:
图书管理需求表:用于存储书籍信息。
书籍序号(book_id)
书名(book_name)
作者名(book_author)
出版社(book_press)
书籍价格(book_price)
书籍库存(book_stock)
书籍简介(book_desc)
信息操作表:用于存储借书记录信息。
借书记录序号(rid)
租借学生编号(snum)
图书编号(bid)
借书数量(borrow_num)
借书状态(is_return,0表示已归还,1表示未归还)
租借日期(borrow_date)
人员信息表:用于存储租借人员的信息。
人员编号(per_num)
人员姓名(per_name)
人员性别(per_gender)
人员年龄(per_age)
人员职能(per_func)
项目实施
1. 创建图书信息表
CREATE TABLE books ( book_id INT PRIMARY KEY AUTO_INCREMENT, book_name VARCHAR(50) NOT NULL, book_author VARCHAR(20) NOT NULL, book_press VARCHAR(20) NOT NULL, book_price DECIMAL(10,2) NOT NULL, book_stock INT NOT NULL, book_desc VARCHAR(200) );
2. 创建人员信息表
CREATE TABLE personnel ( per_num CHAR(4) PRIMARY KEY, per_name VARCHAR(20) NOT NULL, per_gender CHAR(2) NOT NULL, per_age INT NOT NULL, per_func VARCHAR(20) NOT NULL );
3. 创建信息操作表
CREATE TABLE records ( rid INT PRIMARY KEY AUTO_INCREMENT, snum CHAR(4) NOT NULL, bid INT NOT NULL, borrow_num INT NOT NULL, is_return TINYINT NOT NULL, borrow_date DATE NOT NULL, FOREIGN KEY (snum) REFERENCES personnel(per_num), FOREIGN KEY (bid) REFERENCES books(book_id) );
4. 测试数据导入
插入一些初始数据以供测试使用:
插入书籍信息 INSERT INTO books (book_name, book_author, book_press, book_price, book_stock, book_desc) VALUES ('The Great Gatsby', 'F. Scott Fitzgerald', 'Charles Scribner''s Sons', 19.99, 5, 'A classic American novel'), ('To Kill a Mockingbird', 'Harper Lee', 'J. B. Lippincott & Co.', 22.50, 3, 'A profound commentary on racial injustice'); 插入人员信息 INSERT INTO personnel (per_num, per_name, per_gender, per_age, per_func) VALUES ('0001', 'John Smith', 'M', 20, 'Student'), ('0002', 'Jane Doe', 'F', 22, 'Student');
5. 借书存储过程及测试
DELIMITER // CREATE PROCEDURE BorrowBook (IN student_id CHAR(4), IN book_id INT, IN num INT, IN date DATE) BEGIN IF (SELECT book_stock FROM books WHERE book_id = book_id) >= num THEN UPDATE books SET book_stock = book_stock num WHERE book_id = book_id; INSERT INTO records (snum, bid, borrow_num, is_return, borrow_date) VALUES (student_id, book_id, num, 0, date); ELSE SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Not enough stock'; END IF; END // DELIMITER ; 调用借书存储过程进行测试 CALL BorrowBook('0001', 1, 1, CURDATE());
6. 还书存储过程及测试
DELIMITER // CREATE PROCEDURE ReturnBook (IN record_id INT) BEGIN DECLARE num INT; SELECT borrow_num INTO num FROM records WHERE rid = record_id AND is_return = 0; IF num IS NOT NULL THEN UPDATE books SET book_stock = book_stock + num WHERE book_id = (SELECT bid FROM records WHERE rid = record_id); UPDATE records SET is_return = 1 WHERE rid = record_id; ELSE SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Record not found or already returned'; END IF; END // DELIMITER ; 调用还书存储过程进行测试 CALL ReturnBook(1);
1. 项目要点
数据库设计:合理设计了图书信息表、人员信息表和借书记录表,确保数据的完整性和一致性。
存储过程:通过存储过程实现了借书和还书的核心功能,提高了代码的复用性和安全性。
测试验证:进行了详细的测试,验证了各个功能的正确性。
2. 未来展望
优化查询性能:使用索引和其他技术提高查询速度。
增加更多功能:如逾期处罚、图书推荐等,以满足更多的用户需求。