关系型数据库MySQL开发要点之多表设计案例详解代码实现

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 关系型数据库MySQL开发要点之多表设计案例详解代码实现

什么是多表设计

项目开发

在进行数据库表结构设计时 根据数据模型和业务关系

会根据业务需求和业务模块之间的关系分析设计表结构

由于业务之间互相关联 所以表结构之间也存在着各种联系

主要分为以下三种

一对多

每个部门下是有多个员工的

但是一个员工只能归属一个部门

完成部门表的设计

建表并添加数据模型

先创建员工表

CREATE TABLE tb_emp(
    id int unsigned primary key auto_increment comment 'ID',
    username varchar(20) not null unique comment '用户名',
    password varchar(32) default '123456' comment '密码',
    name varchar(10) not null comment '姓名',
    gender tinyint unsigned not null comment '性别 1男 2女',
    image varchar(300) comment '图像',
    job tinyint unsigned comment '职位 1班主任 2讲师 3学工主管 4教研主任',
    entrydate date comment '入职时间',
    creat_time datetime not null comment '创建时间',
    update_time datetime not null comment '修改时间'
)comment '员工表';

再创建部门表

CREATE TABLE  tb_dept(
    id int unsigned primary key auto_increment comment 'ID',
    name varchar(10) not null comment '部门名称',
    creat_time datetime not null comment '创建时间',
    update_time datetime not null comment '修改时间'
)comment '部门表';

最后完善员工表信息

在员工表中关联部门的ID

完整代码

CREATE TABLE tb_emp(
    id int unsigned primary key auto_increment comment 'ID',
    username varchar(20) not null unique comment '用户名',
    password varchar(32) default '123456' comment '密码',
    name varchar(10) not null comment '姓名',
    gender tinyint unsigned not null comment '性别 1男 2女',
    image varchar(300) comment '图像',
    job tinyint unsigned comment '职位 1班主任 2讲师 3学工主管 4教研主任',
    entrydate date comment '入职时间',
    dept_id int unsigned comment '归属的部门id',
    creat_time datetime not null comment '创建时间',
    update_time datetime not null comment '修改时间'
)comment '员工表';
 
CREATE TABLE  tb_dept(
    id int unsigned primary key auto_increment comment 'ID',
    name varchar(10) not null comment '部门名称',
    creat_time datetime not null comment '创建时间',
    update_time datetime not null comment '修改时间'
)comment '部门表';

一一关联 父表 子表

测试

外键约束操作

我们在项目开发阶段 额外添加外键 直接在图形化界面中操作就行了

这样就好了

成功关联

我们在以后开发中应该使用逻辑外键

重点:一对一设计

案例 用户和身份证号之间的关系

一对一关系 多用于单表的拆分

将一张表的基础字段放在一张表中 其他字段放在另一张表里

以操作操作效率

如果在后端开发中我们遇到了对一对一的关系的反复查询的时候

我们建议使用一对一的关系建立数据库

一对一可以看成是一种特殊的一对多关系

代码实现

USE bigdate1421;
 
DROP TABLE tb_user;
DELETE  FROM tb_user;
 
DROP TABLE tb_user_card;
DELETE  FROM tb_user_card;
 
-- 一对一 用户和身份证
CREATE TABLE tb_user(
    id int unsigned primary key auto_increment comment 'ID',
    name varchar(10) not null comment '姓名',
    gender tinyint unsigned not null comment '性别 1男 2女',
    phone char(11) comment '手机号',
    degree varchar(10) comment '学历'
) comment '用户信息表';
 
insert into tb_user values
    (1,'高畅',2,'111','大学'),
    (2,'栾增旭',1,'333','大学'),
    (3,'刘岩',1,'222','大学'),
    (4,'郑子烨',2,'444','大学'),
    (5,'于芯怡',2,'555','大学');
 
-- 第一张表式用户基本信息表 第二张表是用户身份信息表
CREATE TABLE tb_user_card(
    id int unsigned primary key auto_increment comment 'ID',
    nationality varchar(10) not null comment '民族',
    idcard char(18) not null comment '身份证号',
    expire_begin date not null comment '有限期限_开始',
    user_id int unsigned not null unique comment '用户ID',
    constraint fk_user_id foreign key (user_id) references tb_user(id)
)comment '用户身份信息表';
 
insert into tb_user_card values
    (1,'汉','111111111111111111','2024-05-07',1),
    (2,'汉','222222222222222222','2024-05-07',2),
    (3,'汉','333333333333333333','2024-05-07',3),
    (4,'汉','444444444444444444','2024-05-07',4),
    (5,'汉','555555555555555555','2024-05-07',5);

展示

重点:多对多设计

学生与老师的关系

一个学生可以有多个老师

一个老师也可以有多个学生

多对多时借助外键是很难实现的

我们要借助中间表来实现

代码实现

USE bigdate1421;
 
-- 多对多 学生与课程
 
-- 第一张表
create table tb_student(
    id int auto_increment primary key comment '主键ID',
    name varchar(10) comment '姓名',
    no varchar(10) comment '学号'
) comment '学生表';
 
insert into tb_student(name, no) values
    ('高畅','5'),
    ('栾增旭','4'),
    ('刘岩','3'),
    ('郑子烨','2'),
    ('于芯怡','1');
 
-- 第二张表
create table tb_course(
    id int auto_increment primary key comment '主键ID',
    name varchar(10) comment '课程名称'
)comment '课程表';
 
insert into tb_course (name) values
    ('Java'),
    ('Javascript'),
    ('golang'),
    ('python');
 
-- 第三张表 中间表
create table tb_student_course(
    id int auto_increment primary key comment '主键ID',
    student_id int not null comment '学生ID',
    course_id int not null comment '课程ID',
    constraint fk_courseid foreign key (course_id) references tb_course(id),
    constraint fk_studentid foreign key (student_id) references tb_student(id)
)comment '学生课程中间表';
 
insert into tb_student_course (student_id, course_id) values
    (1,1),
    (1,2),
    (1,3),
    (2,1),
    (2,2),
    (2,3),
    (2,4),
    (3,1),
    (3,3),
    (4,3),
    (4,4);

展示

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
11天前
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。
|
13天前
|
存储 SQL 关系型数据库
使用MySQL Workbench进行数据库备份
【9月更文挑战第13天】以下是使用MySQL Workbench进行数据库备份的步骤:启动软件后,通过“Database”菜单中的“管理连接”选项配置并选择要备份的数据库。随后,选择“数据导出”,确认导出的数据库及格式(推荐SQL格式),设置存储路径,点击“开始导出”。完成后,可在指定路径找到备份文件,建议定期备份并存储于安全位置。
138 11
|
8天前
|
存储 SQL 关系型数据库
MySQL的安装&数据库的简单操作
本文介绍了数据库的基本概念及MySQL的安装配置。首先解释了数据库、数据库管理系统和SQL的概念,接着详细描述了MySQL的安装步骤及其全局配置文件my.ini的调整方法。文章还介绍了如何启动MySQL服务,包括配置环境变量和使用命令行的方法。最后,详细说明了数据库的各种操作,如创建、选择和删除数据库的SQL语句,并提供了实际操作示例。
49 13
MySQL的安装&数据库的简单操作
|
14天前
|
存储 SQL 关系型数据库
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
MySQL如何进行分库分表、数据迁移?从相关概念、使用场景、拆分方式、分表字段选择、数据一致性校验等角度阐述MySQL数据库的分库分表方案。
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
|
3天前
|
SQL 关系型数据库 MySQL
创建包含MySQL和SQLServer数据库所有字段类型的表的方法
创建一个既包含MySQL又包含SQL Server所有字段类型的表是一个复杂的任务,需要仔细地比较和转换数据类型。通过上述方法,可以在两个数据库系统之间建立起相互兼容的数据结构,为数据迁移和同步提供便利。这一过程不仅要考虑数据类型的直接对应,还要注意特定数据类型在不同系统中的表现差异,确保数据的一致性和完整性。
18 4
|
12天前
|
SQL 监控 关系型数据库
MySQL数据库中如何检查一条SQL语句是否被回滚
检查MySQL中的SQL语句是否被回滚需要综合使用日志分析、事务状态监控和事务控制语句。理解和应用这些工具和命令,可以有效地管理和验证数据库事务的执行情况,确保数据的一致性和系统的稳定性。此外,熟悉事务的ACID属性和正确设置事务隔离级别对于预防数据问题和解决事务冲突同样重要。
27 2
|
19天前
|
前端开发 数据库
数据库表设计生成代码
BizWorks ToolKit插件集成Mybatis-Plus代码生成工具,支持从数据库表生成代码,便于研发过程中数据模型变更后的代码同步。本文介绍批量生成代码的方法、配置说明及项目示例。配置文件`*.mp.yaml`用于描述生成行为,可放置于`src/main/resource/bizworks/mybatis-plus/`路径下。配置包括数据库信息、输出目录及包名等。通过IDEA右键菜单即可启动代码生成。具体配置和示例详见文档。
24 2
|
15天前
|
存储 缓存 关系型数据库
MySQL 视图:数据库中的灵活利器
视图是数据库中的虚拟表,由一个或多个表的数据经筛选、聚合等操作生成。它不实际存储数据,而是动态从基础表中获取。视图可简化数据访问、增强安全性、提供数据独立性、实现可重用性并提高性能,是管理数据库数据的有效工具。
|
15天前
|
SQL 关系型数据库 MySQL
MySQL技术安装配置、数据库与表的设计、数据操作解析
MySQL,作为最流行的关系型数据库管理系统之一,在WEB应用领域中占据着举足轻重的地位。本文将从MySQL的基本概念、安装配置、数据库与表的设计、数据操作解析,并通过具体的代码示例展示如何在实际项目中应用MySQL。
53 0
|
20天前
|
前端开发 数据库 开发者
数据模型(数据库表设计)生成代码
BizWorks ToolKit 插件集成 Mybatis-Plus 代码生成工具,支持从数据库表批量生成代码,简化开发流程。本文详细介绍配置方法及项目示例,包括配置文件格式、生成选项及具体操作步骤,帮助开发者快速实现代码同步更新。配置文件 `.mp.yaml` 支持自定义输出目录、生成组件等,适用于多种项目结构。
29 0