数据库大作业——基于qt开发的图书管理系统(二) 相关表结构的设计

news2024/9/22 1:06:54

前言

在上一篇文章中。我们完成了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数据库并且编写可视化页面与相关的业务逻辑了,大家下篇见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1645816.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Fluent 区域交界面的热边界条件

多个实体域公共交界面的壁面,Fluent 会分拆为 wall 和 wall-shadow 的两个壁面,两者为配对关系,分别从属于一个实体域。 配对面可使用热通量、温度、耦合三类热边界条件,前两者统称为非耦合热边界条件。 耦合为配对面默认的热边界…

迭代器解释(C++)

一、什么是迭代器 为了提高C编程的效率,STL(Standard Template Library)中提供了许多容器,包括vector、list、map、set等。然而有些容器(vector)可以通过下标索引的方式访问容器里面的数据,但是…

TypeError报错处理

哈喽,大家好,我是木头左! 一、Python中的TypeError简介 这个错误通常表示在方法调用时,参数类型不正确,或者在对字符串进行格式化操作时,提供的变量与预期不符。 二、错误的源头:字符串格式化…

select,poll,epoll

在 Linux Socket 服务器短编程时,为了处理大量客户的连接请求,需要使用非阻塞I/O和复用,select,poll 和 epoll 是 Linux API 提供的I/O复用方式。 \selectpollepoll操作方式遍历遍历回调底层实现数组链表哈希表IO效率每次调用都进…

数据结构——链表专题1

文章目录 一、移除链表元素二、反转链表三、合并两个有序链表四、链表的中间节点五、环形链表的约瑟夫问题六、分割链表 一、移除链表元素 原题链接:移除链表元素 一个解法是遍历原链表,将与val相等的结点抛弃,链接后一个结点 另一个解法是…

被问了n遍的小程序地理位置权限开通方法

小程序地理位置接口有什么功能? 在平时我们在开发小程序时,难免会需要用到用户的地理位置信息的功能,小程序开发者开放平台新规要求如果没有申请开通微信小程序地理位置接口( getLocation ),但是在代码中却使用到了相关接口&#…

【go项目01_学习记录06】

学习记录 1 使用中间件1.1 测试一下1.2 push代码 2 URI 中的斜杆2.1 StrictSlash2.2 兼容 POST 请求 1 使用中间件 代码中存在重复率很高的代码 w.Header().Set("Content-Type", "text/html; charsetutf-8")统一对响应做处理的,我们可以使用中…

鸿蒙内核源码分析(原子操作篇) | 谁在为原子操作保驾护航

基本概念 在支持多任务的操作系统中,修改一块内存区域的数据需要“读取-修改-写入”三个步骤。然而同一内存区域的数据可能同时被多个任务访问,如果在修改数据的过程中被其他任务打断,就会造成该操作的执行结果无法预知。 使用开关中断的方…

【目标检测】Deformable DETR

一、前言 论文: Deformable DETR: Deformable Transformers for End-to-End Object Detection 作者: SenseTime Research 代码: Deformable DETR 特点: 提出多尺度可变形注意力 (Multi-scale Deformable Attention) 解决DETR收敛…

力扣每日一题115:不同的子序列

题目 困难 给你两个字符串 s 和 t ,统计并返回在 s 的 子序列 中 t 出现的个数,结果需要对 109 7 取模。 示例 1: 输入:s "rabbbit", t "rabbit" 输出:3 解释: 如下所示, 有 3 种…

2024视觉与学习青年学者研讨会(VALSE 2024)热点推文预告

视觉与学习青年学者研讨会(VALSE)是国内人工智能领域顶尖学者一年一度的研讨会。该会议的特点是大、全、新。会议的规模大,参会者达到五千人以上;会议的主题全,全面覆盖人工智能的各大领域;会议的内容新&am…

CSS Web服务器、2D、动画和3D转换

Web服务器 我们自己写的网站只能自己访问浏览,但是如果想让其他人也浏览,可以将它放到服务器上。 什么是Web服务器 服务器(我们也会称之为主机)是提供计算服务的设备,它也是一台计算机。在网络环境下,根据服务器提供的服务类型不…

【arduino】库的安装方法

arduino 库的安装方法 假设你已经安装好 Arduino IDE 以 OneButton 为例来介绍几种安装方法 文章目录 arduino 库的安装方法方法一:直接安装法方法二:导入 .ZIP库方法三:将库文件夹直接复制到贡献库路径下方法四:将库文件夹直接…

JAVA学习14——异常

目录 异常: 1.异常基本介绍: 2.异常体系图: 3.五大运行时异常: (1)NullPointerException空指针异常: (2)AirthmetiException数字运算异常: &#xff0…

投资海外标的,首选跨境ETF!现在新开佣金低至万0.5!

全球资产配置的利器 随着经济的发展,全球资产配置成为中产阶级的关注方向。目前,全球资产配置的主要渠道包括直接开立境外账户、 QDII 基金、跨境 ETF 等。 现阶段通过跨境 ETF 投资境外股市是最便利、最具效率的方式之一。首先,与直接境外…

Gradle 基础学习(三) 认识Command-Line Interface

Gradle命令行接口 除了IDE外,我们主要通过Gradle命令行接口来运行Gradle任务和管理Gradle项目。 下面是Gradle命令行使用的一些参考,熟悉后建议实际项目中使用Gradle Wrapper,gradle用法都可以替换为gradlew (macOS / Linux) 或gradlew.bat…

LVGL移植到STM32F4

1、LVGL简介 LittlevGL是一个免费的开源图形库,提供了创建嵌入式GUI所需的一切,具有易于使用的图形元素、漂亮的视觉效果和低内存占用。 1.1、LVGL特点 强大的构建模组:按钮、图表、列表、滑块、图像等先进的图形:动画、反锯齿…

hadoop学习---基于Hive的数仓搭建增量信息拉链表的实现

拉链表就是SCD2,它的优点是即满足了反应数据的历史状态,又能在最大程度上节省存储。 拉链表的实现需要在原始字段基础上增加两个新字段: start_time(表示该条记录的生命周期开始时间——周期快照时的状态)end_time(该条记录的生命周期结束时…

家政保洁上门预约服务小程序源码系统 带完整的安装代码包以及搭建教程

随着社会的快速发展和人们生活节奏的加快,家政保洁服务已成为现代生活中不可或缺的一部分。为了满足广大用户的需求,罗峰给大家分享一款家政保洁上门预约服务小程序源码系统,该系统不仅提供完整的安装代码包,还附带详细的搭建教程…

ContEA阅读笔记

Facing Changes: Continual Entity Alignment for Growing Knowledge Graphs 面对变化:不断增长的知识图谱的持续实体对齐 Abstract 实体对齐是知识图谱(KG)集成中一项基本且重要的技术。多年来,实体对齐的研究一直基于知识图谱是静态的假设&#xff…