MySQL数据库基础练习系列2、图书借阅管理系统

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL数据库基础练习系列2、图书借阅管理系统

MySQL数据库基础练习系列目标

很多学生或者说是初学者在学习完成数据库的基础增删改查后就自认为在数据库这里就很熟悉了,但是不接触项目根本部知道需求,我这里准备了50个项目的基本需求来让大家来熟练各类项目的列信息,让大家更好的深入项目进行实战式的练习,可以让大家在后面面试的时候有更多更丰富的资历让大家可以与面试官侃侃而谈。

数据库环境

MySQL版本:5.7.31-log

数据库字符集,所有数据库通用字符集与排序规则,支持中文数据。

字符集:utf8

排序规则:utf8_general_ci

使用工具:Navicat Premium 15

图书借阅管理系统是一个用于管理图书馆图书借阅流程的系统。该系统主要包括对图书信息、读者信息、借阅记录、图书分类以及管理员信息的管理。以下是各模块的主要功能:

  1. 图书信息管理:记录图书的详细信息,如书名、作者、出版社、ISBN号、库存量等。
  2. 读者信息管理:记录读者的基本信息,如姓名、性别、年龄、联系方式、借阅证号等。
  3. 借阅记录管理:记录读者借阅图书的详细信息,包括借阅时间、应还时间、是否归还等。
  4. 图书分类管理:对图书进行分类,方便管理和查询。
  5. 管理员信息管理:记录管理员的基本信息,用于系统的权限管理和操作记录。

接下来,我们将使用MySQL数据库的DDL语句来创建这个系统所需的至少5张表,并确保语句顺序正确可以直接运行。

数据库DDL(注意创建顺序)

为了直接运行DDL语句并创建表,我们需要确保在创建含有外键约束的表之前,相关的被引用表(即外键指向的表)已经存在。所以我们在创建表的时候一定要按照一定的顺序来创建,否则就会出现没有外键关系导致的创建异常。

 
-- 首先创建图书分类表,因为图书信息表中会引用到分类表的ID
CREATE TABLE BookCategories (
    category_id INT PRIMARY KEY AUTO_INCREMENT,      -- 分类ID,自增主键
    category_name VARCHAR(100) NOT NULL,             -- 分类名称,不能为空
    description TEXT                                  -- 分类描述,可以为空
);
 
 
-- 接着创建图书信息表,依赖于图书分类表,因为每本图书都属于一个分类
CREATE TABLE Books (
    book_id INT PRIMARY KEY AUTO_INCREMENT,          -- 图书ID,自增主键
    book_name VARCHAR(255) NOT NULL,                 -- 图书名称,不能为空
    author VARCHAR(100) NOT NULL,                    -- 作者,不能为空
    publisher VARCHAR(100) NOT NULL,                 -- 出版社,不能为空
    isbn VARCHAR(13) UNIQUE NOT NULL,               -- ISBN号,唯一且不能为空
    stock_quantity INT NOT NULL,                     -- 库存量,不能为空
    category_id INT,                                  -- 图书所属分类的ID,外键引用
    FOREIGN KEY (category_id) REFERENCES BookCategories(category_id) -- 外键约束,确保分类ID的有效性
);
 
 
-- 然后创建读者信息表,该表不依赖于其他表,可以独立创建
CREATE TABLE Readers (
    reader_id INT PRIMARY KEY AUTO_INCREMENT,        -- 读者ID,自增主键
    name VARCHAR(100) NOT NULL,                      -- 读者姓名,不能为空
    gender ENUM('男', '女') NOT NULL,               -- 读者性别,枚举类型,不能为空
    age INT NOT NULL,                                -- 读者年龄,不能为空
    contact_info VARCHAR(100),                       -- 联系方式,可以为空
    library_card_number VARCHAR(50) UNIQUE NOT NULL  -- 借阅证号,唯一且不能为空
);
 
 
-- 接下来创建借阅记录表,依赖于图书信息表和读者信息表,因为每条借阅记录都关联一本图书和一个读者
CREATE TABLE BorrowingRecords (
    borrow_id INT PRIMARY KEY AUTO_INCREMENT,        -- 借阅记录ID,自增主键
    reader_id INT NOT NULL,                          -- 读者ID,不能为空,外键引用
    book_id INT NOT NULL,                            -- 图书ID,不能为空,外键引用
    borrow_date DATE NOT NULL,                      -- 借阅日期,不能为空
    return_date DATE,                                -- 归还日期,可以为空
    is_returned BOOLEAN NOT NULL DEFAULT FALSE,      -- 是否归还标志,默认为未归还
    FOREIGN KEY (reader_id) REFERENCES Readers(reader_id),   -- 外键约束,确保读者ID的有效性
    FOREIGN KEY (book_id) REFERENCES Books(book_id)         -- 外键约束,确保图书ID的有效性
);
 
 
-- 最后创建管理员信息表,该表不依赖于其他表,可以独立创建
CREATE TABLE Administrators (
    admin_id INT PRIMARY KEY AUTO_INCREMENT,         -- 管理员ID,自增主键
    username VARCHAR(50) NOT NULL,                    -- 用户名,不能为空
    password VARCHAR(255) NOT NULL,                  -- 密码,不能为空(注:实际使用中,密码应加密存储)
    name VARCHAR(100) NOT NULL,                      -- 管理员姓名,不能为空
    contact_info VARCHAR(100)                        -- 联系方式,可以为空
);

插入数据DML(注意插入数据顺序)

插入数据的时候也要注意主外键关系,如果没有外检的情况下是没有办法插入从表数据的。

遵循的数据库三范式

数据库建表的三范式(3NF,Third Normal Form)是关系型数据库设计的基本原则,用于确保数据库结构的逻辑性和减少数据冗余。这三个范式是逐步细化的,每一个范式都是在前一个范式的基础上建立的。下面我将详细解释这三个范式:

第一范式(1NF, First Normal Form)

定义

  1. 列不可分割,即数据库表的每一列都是不可分割的原子数据项。
  2. 每一列都是不可再分的最小数据单元(也称为最小的原子单元)。

解释

  • 在第一范式中,主要关注的是列的原子性。也就是说,表中的每一列都应该只包含一个值,而不能包含集合、数组或其他复合数据类型。
  • 例如,如果有一个“地址”列,它包含了街道、城市、省份和国家等信息,那么这就违反了第一范式。应该将这个“地址”列拆分成多个独立的列,如“街道”、“城市”、“省份”和“国家”。

第二范式(2NF, Second Normal Form)

定义

  1. 满足1NF。
  2. 非主键列必须完全依赖于主键,而不能只依赖于主键的一部分(针对复合主键而言)。

解释

  • 第二范式建立在第一范式的基础上,主要关注于主键与非主键列之间的依赖关系。
  • 在第二范式中,一个表只能保存一种数据,不可以把多种数据保存在同一张数据库表中。
  • 如果表中的某一列只与复合主键的一部分有关,那么它就不应该存在于这个表中,而应该被分离出去形成另外一张新表。

第三范式(3NF, Third Normal Form)

定义

  1. 满足2NF。
  2. 非主键列必须直接依赖于主键,不能存在传递依赖。即非主键列必须直接依赖于整个主键,而不能依赖于主键的一部分。

解释

  • 第三范式是在第二范式的基础上进一步细化的。它主要关注于消除传递依赖,即非主键列不应该依赖于主键的某一部分,而应该直接依赖于整个主键。
  • 如果存在传递依赖,那么应该考虑将这个非主键列分离出去,形成新的表,并通过主键或外键与原表进行关联。
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6天前
|
关系型数据库 MySQL 数据挖掘
MySQL窗口函数详解(概念+练习+实战)
MySQL窗口函数详解(概念+练习+实战)
24 1
|
11天前
|
SQL 关系型数据库 MySQL
MySQL数据库基础练习系列15、电子邮件管理系统
MySQL数据库基础练习系列15、电子邮件管理系统
16 1
|
11天前
|
SQL 关系型数据库 MySQL
MySQL数据库基础练习系列14、博客后台管理系统
MySQL数据库基础练习系列14、博客后台管理系统
17 1
|
11天前
|
SQL 关系型数据库 MySQL
MySQL数据库基础练习系列13、用户注册与登录系统
MySQL数据库基础练习系列13、用户注册与登录系统
13 1
|
11天前
|
SQL 关系型数据库 MySQL
MySQL数据库基础练习系列12、论坛管理系统
MySQL数据库基础练习系列12、论坛管理系统
11 1
|
11天前
|
SQL 关系型数据库 MySQL
MySQL数据库基础练习系列11、新闻发布系统
MySQL数据库基础练习系列11、新闻发布系统
15 1
|
11天前
|
SQL 关系型数据库 MySQL
MySQL数据库基础练习系列10、访客登记系统
MySQL数据库基础练习系列10、访客登记系统
15 1
|
11天前
|
SQL 关系型数据库 MySQL
MySQL数据库基础练习系列9、在线投票系统
MySQL数据库基础练习系列9、在线投票系统
13 1
|
11天前
|
SQL 关系型数据库 MySQL
MySQL数据库基础练习系列8、成绩录入与分析系统
MySQL数据库基础练习系列8、成绩录入与分析系统
14 1
|
5天前
|
JavaScript
Node.js实操练习(一)之Node.js+MySQL+RESTful(4)
Node.js实操练习(一)之Node.js+MySQL+RESTful

热门文章

最新文章