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

展示

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

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

相关文章

yolo world 瑞芯微芯片rknn部署、地平线芯片Horizon部署、TensorRT部署

特别说明:参考官方开源的 yoloworld 代码、瑞芯微官方文档、地平线的官方文档,如有侵权告知删,谢谢。 模型和完整仿真测试代码,放在github上参考链接 模型和代码。 yoloworld出来的有一段时间了,还没有盘到板端上玩一玩…

【Linux系列】file命令

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

普通人可以做什么兼职副业?推荐7 种卖情怀的生意,小众高利润

一瓶茅台,尽管成本仅为70元,但其建议零售价却高达1499元,而在市场上的流通价格更是突破了2600元大关。同样的一款手提包,在网络上仅售几百元,但一旦贴上了LV的标志,其售价便瞬间飙升至一万多元。这究竟是为…

kafka学习笔记(三、生产者Producer使用及配置参数)

1.简介 1.1.producer介绍 生产者就是负责向kafka发送消息的应用程序。消息在通过send()方法发往broker的过程中,有可能需要经过拦截器(Interceptor)、序列化器(Serializer)和分区器(Partitioner)的一系列作用后才能被真正的发往broker。 demo: public class Kafk…

【嵌入式必读】一文彻底理解PID自整定及PID自整定代码设计

文章目录 1. 前言2. PID简介3. 常用的PID自整定方法3.1 临界度比例法3.2 衰减曲线法 4. 继电反馈整定法原理4.1 继电反馈自整定的基本思想4.2 继电反馈自整定原理 5. 算法设计5.1 振荡的生成5.2 提取出临界周期 T c T_c Tc​和振荡波形幅值 A A A5.3 计算出PID参数 6 原代码6.1…

VmWare 虚拟机没有网络解决办法

由于最近需要,装了个VM虚拟机,但是突然发现本机有网络,虚拟机却没有网络,更换了虚拟机的网络设置,都尝试过了 都不管用, 最后尝试了这种方法完美解决 还原网络默认设置 首先还原虚拟网络编辑器设置 启动V…

小程序开通wx.getlocation接口原来还有这个方法

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

软件开发者如何保护自己的知识产权?

最近一个关于开源软件的知识产权纠纷的案例,非常有代表性, 其中涉及到的平台openwrt,一口君十几年前曾玩过, 通过这个案例,我们可以学习如何在今后工作中保护自己的知识产权, 以及如何合理直接或者间接利…

08 - 条件判断语句

---- 整理自狄泰软件唐佐林老师课程 文章目录 1. 条件判断语句2. 语法说明3. 经验4. 代码 1. 条件判断语句 makefile 中支持条件判断语句 可以根据条件的值来决定 make 的执行可以比较两个不同变量或者变量和常量的值 注:条件判断语句只能用于控制 make 实际执行的…

zabbix监控方式(zabbix-trapper)

中文:zabbix采集器,即zabbix sender 。 Zabbix-Trapper 监控方式可以一次批量发送数据给Zabbix Server,与主动模式不同,Zabbix-Trapper 可以让用户控制数据的发送,而不用Zabbix-Agent进程控制,这意味着可以…

品深茶的抗癌功能是否涉及虚假宣传?

品深茶说到底,本质还是中国传统茶叶,茶叶本就是一种含有多种成分的饮品,包括茶多酚、生物碱、氨基酸、有机酸等。这些成分对人体有一定的益处,如抗氧化、抗炎、抗菌等作用。 一些研究表明,茶叶中的某些成分如茶多酚、…

C语言----汉诺塔问题

1.什么是汉诺塔问题 简单来说,就是有三个柱子,分别为A柱,B柱,C柱。其中A柱从上往下存放着从小到大的圆盘,我们需要借助B柱和C柱,将A柱上的所有圆盘转移到C柱上,并且一次只能移动一个圆盘&#…

用户管理中心——数据库设计用户注册逻辑设计

用户管理中心——数据库设计&用户注册逻辑设计 规整项目目录1. 数据库自动生成器的使用实现基本的数据库操作(操作user表) 2. 注册逻辑的设计(1) 写注册逻辑(2) 实现(3) 测试代码 3. 遇到的问题 规整项目目录 utils–存放工具类,比如加密…

Jsoncpp介绍

1.简介 Jsoncpp 是一个 C 库,用于解析和生成 JSON 数据。它提供了一个易于使用的 DOM(Document Object Model)风格的 API,允许开发者以树形结构的方式操作 JSON 数据。 Jsoncpp 是一个C库,允许操作JSON值,…

【软测学习笔记】Python入门Day02

🌟博主主页:我是一只海绵派大星 📚专栏分类:软件测试笔记 📚参考教程:黑马教程❤️感谢大家点赞👍收藏⭐评论✍️ python安装 1、进入Python的官方下载页面: Download Python | Py…

【论文阅读笔记】Mamba模型代码理解

0.开源代码地址 官方实现:state-spaces/mamba (github.com) 最简化实现:johnma2006/mamba-minimal: Simple, minimal implementation of the Mamba SSM in one file of PyTorch. (github.com) 直接实现:alxndrTL/mamba.py: A simple and e…

网络安全与IP地址的关联

网络安全与IP地址之间存在着密不可分的关系。IP地址作为网络通信的基础,对于网络安全的保障具有至关重要的作用。以下将详细探讨网络安全与IP地址之间的关联,以及IP地址在网络安全中的应用。 一、IP地址与网络安全的关系 IP地址是网络通信的基础&#x…

力扣437. 路径总和 III

Problem: 437. 路径总和 III 文章目录 题目描述思路复杂度Code 题目描述 思路 1.定义int类型函数rootSum(root, targetSum),用于求取每一个节点等于目标函数的路径数: 1.1.易知rootSum(root, targetSum)求出的数量等于rootSum(root.left, targetSum - va…

C语言 main( ) 函数的指针数组形参是怎么回事?

一、问题 在使⽤⼀些开发⼯具⽣成C语⾔⽂件时,主函数 mian( ) 中会有参数,这个参数到底是怎么回事⼉呢? 二、解答 mian( ) 称为主函数,是所有程序运⾏的⼊口。 mian( ) 函数是由系统调⽤的,当处于操作命令状态下&…

【C 数据结构-动态内存管理】4. 无用单元收集(垃圾回收机制)

文章目录 【 1. 问题描述与解决方法 】【 2. 中断回收机制 】 【 1. 问题描述与解决方法 】 问题描述 动态存储管理的运行机制可以概括为:当用户发出申请空间的请求后,系统向用户分配内存;用户运行结束释放存储空间后,系统回收内…