关系型数据库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);

展示

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

京东JD商品详情API返回值揭秘:精准掌握商品信息

在当今电子商务繁荣的时代,对于电商平台来说,提供准确、详尽的商品信息对于满足用户需求、提升购物体验至关重要。京东作为中国领先的电商平台,通过其开放的API接口,为开发者提供了获取商品详情的强大工具。本文将深入探讨京东JD商…

FastDFS-单机扩容

描述 周一上班收到用户反馈系统异常,紧急排查日志发现报错:FdfsServerException:错误:28,错误信息:没有足够的存储空间。 解决 根据异常信息判断是文件服务器可用内存不够了,首先登录文件服务器,使用df -h命令查看一…

GMS地下水数值模拟及溶质(包含反应性溶质)运移模拟技术

采用全流程模式将地下水数值模拟软件GMS的操作进行详细剖析和案例联系。不仅使学员掌握地下水数值模拟软件GMS的全过程实际操作技术的基本技能,而且可以深刻理解模拟过程中的关键环节,以解决实际问题能力。同时为满足环评从业人员进一步加强地下水数值模…

AF594-标记羊抗鼠免疫球蛋白(H+L),山羊抗小鼠IgG全长抗体已被交叉吸附在抗人IgG和人血清上,然后再偶联以小化交叉反应性

试剂介绍: AF594-标记羊抗鼠免疫球蛋白(HL)是荧光标记二抗,我们的山羊抗小鼠IgG全长抗体已被交叉吸附在抗人IgG和人血清上,然后再偶联以小化交叉反应性。 这种AF594标记的山羊抗小鼠IgG缀合物通过交叉吸附的山羊抗小鼠IgG全抗体与AF594 NHS酯…

应用层协议——HTTP协议

1. 认识HTTP协议 HTTP(Hyper Text Transfer Protocol)协议又叫做超文本传输协议,是一个简单的请求-响应协议,HTTP通常运行在TCP之上。 超文本的意思就是超越普通的文本,http允许传送文字,图片&#xff0c…

深入理解nginx http响应限速功能

目录 1. 引言2. 配置参数2.1 limit_rate 配置指令2.2 limit_rate_after 配置指令2.3 其他限速配置 3. 源码分析 1. 引言 在现代互联网应用中,服务器的性能和响应速度是至关重要的。为了保证服务器的稳定性和可靠性,限制客户端对服务器的访问速度是一项重…

Web实操(6),基础知识学习(24~)

1.[ZJCTF 2019]NiZhuanSiWei1 (1)进入环境后看到一篇php代码,开始我简单的以为是一题常规的php伪协议,多次试错后发现它并没有那么简单,它包含了基础的文件包含,伪协议还有反序列化 (2&#x…

【数据结构】顺序表与ArrayList

一、什么是顺序表 概念:顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。 如下图: 优点:访问速度比较快,在给定下标的情况下时间复杂度低至O(…

网络1--通信过程的理解

1.封装与解包 通信的过程就是不断的封装和解包的过程 封装即就是按照“应用”“传输” “网络” “链路” 层,封装给每一层都加上相应的包头(每一层都有协议,)解包就是接受到的包文被一层层去掉相对应的包头。 任何一层的协议都…

ATFX汇市:日本央行或3万亿干预,日元升值势头显著

​ATFX汇市:4月29日,USDJPY创出历史新高160.21,随后进入快速回落阶段。五个交易日,最低价触及151.86点,相比最高价暴跌835基点,约5.21%。同期的美元指数跌幅仅为0.96%,两者跌幅严重不匹配&#…

【intro】图卷积神经网络(GCN)-续

本文为【intro】图卷积神经网络(GCN)-CSDN博客后续(因为经验告诉我超过2w字编辑器就会卡……) 第一部分还是进一步再看看GCN 图卷积神经网络GCN_哔哩哔哩_bilibili 回顾 图神经网络的基本原理就是把图中的节点编码映射成一个低…

RabbitMQ是如何保证消息可靠性的?——Java全栈知识(16)

RabbitMQ 的消息不可靠也就是 RabbitMQ 消息丢失只会发生在以下几个方面: 生产者发送消息到 MQ 或者 Exchange 过程中丢失。Exchange 中的消息发送到 MQ 中丢失。消息在 MQ 或者 Exchange 中服务器宕机导致消息丢失。消息被消费者消费的过程中丢失。 大致就分为生…

CANdela/Diva系列1--CANdela Studio的基本介绍

大家好,这个系列主要给大家介绍跟诊断相关的Vector 工具CANdela和Diva,首先介绍CANdela。 目录 1.CANdela的简介: 2.如何打开CANdela 工程: 3.CANdela工程的详细介绍: 3.1 工具栏的介绍: 3.2 工作树的…

MobileNet网络详解

一、了解 网络亮点: 1、DW网络,大大减少运算量核参数数量 2、增加超参数:控制卷积层卷积核个数的超参数 ,控制图像输入大小的超参数 ,这两个超参数是人为设定的,不是机器学习到的。 二、DW卷积&#xff…

通信录的动态版本

一. 增加需求 在学习了动态开辟内存之后 我们对于通讯录产生了新的需求 要求我们做出一个动态增长的版本 即 随着我们储存联系人的增加 储存的空间增加 要求 : 1 初始空间为3 2 每次达到上限之后 扩容两个内存 二. 动手实施 我们首先要创建一个结构体 结构体…

普洱茶泡多少茶叶才算淡茶?

普洱茶淡茶一般放几克茶叶,品深茶官网根据多年专业研究与实践结果,制定了淡茶冲泡标准。在冲泡普洱茶淡茶时,茶叶的投放量是关键因素之一。淡茶冲泡标准旨在保持茶汤的清爽口感,同时充分展现普洱茶的独特风味。 根据《品深淡茶冲…

uniapp日期区间选择器

uniapp日期区间选择器 在 uniapp 中创建一个简单的自定义日期范围的日期区间选择器: - 限制有效日期范围开始日期为 2024-01-01,结束日期为当日; - 默认日期区间为当日向前计算的7日区间; - 选择开始时间后,判断不可大…

【Pytorch】6.torch.nn.functional.conv2d的使用

阅读之前应该先了解基础的CNN网络的逻辑 conv2d的作用 是PyTorch中用于执行二维卷积操作的函数。它的作用是对输入数据进行二维卷积操作,通常用于图像处理和深度学习中的卷积神经网络(CNN)模型。 conv2d的使用 我们先查看一下官方文档 inpu…

【前端学习——正则】

https://www.bilibili.com/video/BV1da4y1p7iZ/?spm_id_from333.337.search-card.all.click&vd_source5cef5968d539682b683e7d01b00ad01b 学习网站 https://github.com/ziishaned/learn-regex/blob/master/translations/README-cn.md

笔记本连接不上远程桌面,笔记本无法连接远程桌面的可能原因及解决方法

在使用远程桌面功能时,笔记本无法成功连接的情况可能由多种原因引起。为了有效地解决这个问题,我们需要逐一排查这些可能的原因,并采取相应的解决措施。 首先,网络连接稳定性是远程桌面连接成功的关键。请确保笔记本和远程计算机之…