前言
在上一篇文章中。我们完成了Qt环境的安装,同时完成了有关项目需求的分析并绘制了整体的项目架构图,而在图书管理系统中,其实我们主要完成的就是对数据的增删改查,并将这些功能通过信号与槽机制和可视化界面绑定在一起,进而起到简化操作的目的,所以如何去设计数据库表结构,是项目开始的第一步,也是最为主要的一步。
数据库设计的工具
这里博主使用的数据库结构设计工具是Navicat
,大家如果没有安装过,可以参考下面这篇文章:
[新人向]MySQL和Navicat下载、安装及使用详细教程
相关表结构的设计
- user表
注意:下面的sql语句是我导入的sql脚本,并不是用来创建表,只是作为示例,大家创建表的时候主要还是利用图形化界面,而不是用命令,这也是我们使用Navicat
的初衷。
SQL 语句如下:
DROP TABLE IF EXISTS `users`; CREATE TABLE `users` ( `userid` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户唯一标识符,自增长主键', `username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户名', `password` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '密码', `type_id` int(11) NULL DEFAULT NULL COMMENT '用户类型,连user_type表的type_id(外键)', `email` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户邮箱\r\n', `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户姓名', `contact` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '联系方式', `register` datetime NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '注册日期', PRIMARY KEY (`userid`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; SET FOREIGN_KEY_CHECKS = 1;
- user_type表
SQL 语句如下:
DROP TABLE IF EXISTS `user_type`; CREATE TABLE `user_type` ( `type_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户唯一标识符,自增长主键', `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '类别名', `max_borrow_count` tinyint(4) NULL DEFAULT NULL COMMENT '最大借阅册数', `max_borrow_day` tinyint(4) NULL DEFAULT NULL COMMENT '最大借阅天数限制', PRIMARY KEY (`type_id`) USING BTREE, CONSTRAINT `user_type_key` FOREIGN KEY (`type_id`) REFERENCES `users` (`type_id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; SET FOREIGN_KEY_CHECKS = 1;
- books表
sql语句如下:
DROP TABLE IF EXISTS `books`; CREATE TABLE `books` ( `book_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '图书唯一标识符,自增长主键', `ISBN` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '国际标准书号', `title` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '书名', `author` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '作者', `publisher` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '出版社', `publication_year` year NULL DEFAULT NULL COMMENT '出版年份', `category_id` int(11) NULL DEFAULT NULL COMMENT '图书分类ID,关联categories表的category_id(外键)', `price` decimal(10, 2) NULL DEFAULT NULL COMMENT '价格', `stock_quantity` int(11) NULL DEFAULT NULL COMMENT '库存量', `available_to_borrow` int(11) NULL DEFAULT NULL COMMENT '可借数量', `barcode_id` int(11) NULL DEFAULT NULL COMMENT '条形码id,关联barcodes表barcode_id', PRIMARY KEY (`book_id`) USING BTREE, INDEX `book_catagory_key`(`category_id`) USING BTREE, INDEX `barcodes_id`(`barcode_id`) USING BTREE, CONSTRAINT `book_catagory_key` FOREIGN KEY (`category_id`) REFERENCES `book_category` (`categroy_id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `barcodes_id` FOREIGN KEY (`barcode_id`) REFERENCES `barcodes` (`barcodes_id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; SET FOREIGN_KEY_CHECKS = 1;
- barcodes(条形码)表
- book catefory(图书种类)表
- borrows(图书借阅)表
- reservation(预约)表
备注:由于为篇幅大小考虑,这里相关的sql语句我就不一一列举了,我会将它们以及相关表的设计文档上传到资源里面,大家按需自取即可。
结语
至此我们已经完成所有业务相关表的设计了,耳下面我们的任务就是让qt连接上mysql
数据库并且编写可视化页面与相关的业务逻辑了,大家下篇见!