关系型数据库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://www.mzph.cn/news/833160.shtml

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

相关文章

CMakeLists.txt语法规则:foreach 循环基本用法

一. 简介 cmake 中除了 if 条件判断之外,还支持循环语句,包括 foreach()循环、while()循环。 本文学习 CMakeLists.txt语法中的循环语句。 CMakeLists.txt语法中 有两种 循环实现方式:foreach循环与 while循环。 二. CMakeLists.txt语法规则…

设计列表结构

实现1.1&#xff0c;1.2的有序列表 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>ol{list-style: none;}li:before{color:#f00;font-family:Times New Roman;}li{counter-increment:a 1;}li…

免费https证书申请

HTTPS证书&#xff0c;也称为SSL证书&#xff08;Secure Sockets Layer&#xff09;或TLS证书&#xff08;Transport Layer Security&#xff09;&#xff0c;是一种数字证书&#xff0c;用于在互联网通信中确保数据传输的安全性、完整性和真实性。它是基于公钥基础设施&#x…

RISCV 外部GCC 工具链安装@FreeBSD15

在交叉编译的时候&#xff0c;可以使用FreeBSD15默认的工具链&#xff1a;LLVM 也可以使用GCC工具链&#xff0c;GCC可以使用现成pkg包安装&#xff0c;也可以编译安装。 LLVM的特点是高移植性和高效&#xff0c;但学习成本高。GCC的特点是成熟稳定&#xff0c;但优化能力有限…

Qt之摄像头操作

简单的摄像头测试类 头文件camerawidget.h #ifndef CAMERAWIDGET_H #define CAMERAWIDGET_H#include <QWidget> #include <QList> #include <QCamera> #include <QCameraInfo> #include <QCameraViewfinder> #include <QCameraImageCapture…

基于FPGA的数字电子钟VHDL代码Quartus仿真

名称&#xff1a;基于FPGA的数字电子钟VHDL代码Quartus仿真&#xff08;文末获取&#xff09; 软件&#xff1a;Quartus 语言&#xff1a;VHDL 代码功能&#xff1a; 数字电子钟 1)设计一个能显示秒、分、时的24小时数字钟 2)用数码管显示出时&#xff0c;分&#xff0c;…

OpenSBI 固件代码分析合集-泰晓社区

泰晓社区&#xff1a;https://tinylab.org/ OpenSBI 固件代码分析&#xff08;一&#xff09;&#xff1a;启动流程OpenSBI 固件代码分析&#xff08;二&#xff09;&#xff1a;fw_base.S 源码分析OpenSBI 固件代码分析&#xff08;三&#xff09;: sbi_init.cOpenSBI 固件代…

JDK生成https配置

keytool -genkey -v -alias tomcat -keyalg RSA -keystore D:\https证书\weChat.keystore -validity 36500 -keypass 250250 keytool -importkeystore -srcstoretype JKS -srckeystore D:\https证书\weChat.keystore -srcstorepass 250250 -srcalias tomcat -srckeypass 25025…

Unity射击游戏开发教程:(10)创建主界面

主界面开发 玩游戏时,主菜单是事后才想到要做的。实际上几乎每个游戏都有一个主界面。如果你点击打开游戏并立即开始游戏,你会感到非常惊讶。本文将讨论如何创建带有启动新游戏的交互式按钮的主界面/主菜单。 主菜单将是一个全新的场景。我们将添加一个 UI 图像元素,并在图像…

NLP(13)--文本分类任务

前言 仅记录学习过程&#xff0c;有问题欢迎讨论 情感分析&#xff0c;违规检测&#xff0c;商品评论打分 贝叶斯算法&#xff1a; P(B1) 结果为奇数 P(B2) 结果为偶数 P(A) 结果为5 P(A) P(B1) * P(A|B1) P(B2) * P(A|B2) 1/2 1/3 1/20 支持向量机&#xff1a;les…

java中的变量、数据类型、人机交互

变量 变量要素 1、类型&#xff1b;每一个变量都需要定义类型&#xff08;强类型&#xff09;其它语言有弱类型&#xff08;js&#xff09; 2、变量名&#xff1b; 3、存储的值&#xff1b; 声明方式&#xff1a; 数据类型 变量名 变量值&#xff1b; public static vo…

Java之抽象类和接口

一、抽象类 1.抽象类概念 如果一个类中没有包含足够的信息来描绘一个具体的对象&#xff0c;这样的类就是抽象类&#xff0c; 比如动物类。没有实际工作的方法 , 我们可以把它设计成一个 抽象方法&#xff0c; 包含抽象方法的类我们称为 抽象类。 2.抽象类语法 在Java中&am…

网络基础——校验

网络基础——校验 网络通信的层次化模型&#xff08;如OSI七层模型或TCP/IP四层模型&#xff09;中&#xff0c;每一层都有其特定的校验机制来确保数据传输的正确性和完整性。 物理层 校验方式 不直接涉及校验和&#xff0c;但会采用信号编码技术&#xff08;如曼彻斯特编码…

Linux磁盘IO、网络IO、零拷贝详解

一、什么是I/O&#xff1f; 在计算机操作系统中&#xff0c;所谓的I/O就是输入&#xff08;input&#xff09;和输出&#xff08;output&#xff09;,也可以理解为读&#xff08;read&#xff09;和写&#xff08;write&#xff09;,针对不同的对象&#xff0c;I/O模式可以划分…

什么是接口和类?Java中的集合框架有哪些主要接口和类?

Java中的集合框架有哪些主要接口和类&#xff1f; Java中的集合框架&#xff08;Java Collections Framework&#xff09;提供了一套丰富的接口和类&#xff0c;用于存储和操作对象的集合。以下是Java集合框架中的主要接口和类&#xff1a; 主要接口 Collection&#xff1a; 这…

【busybox记录】【shell指令】comm

目录 内容来源&#xff1a; 【GUN】【comm】指令介绍 【busybox】【comm】指令介绍 【linux】【comm】指令介绍 使用示例&#xff1a; 逐行比较两个排序后的文件 - 默认输出 逐行比较两个排序后的文件 - 如果一个文件的排序有问题&#xff0c;那么反错&#xff08;默认&…

在 Linux 系统中,有多种方法可以查看系统信息

uname&#xff1a; 显示内核信息&#xff0c;如内核版本和机器类型&#xff08;架构&#xff09;。 uname -a hostname&#xff1a; 显示当前系统的主机名。 hostname lsb_release&#xff1a; 显示 Linux 发行版信息&#xff0c;如代号和描述。 lsb_release -a cat /etc/*rele…

泰迪智能科技中职大数据实验室建设(职业院校大数据实验室建设指南)

职校大数据实验室是职校校园文化建设的重要部分&#xff0c;大数据实训室的建设方案应涵盖多个方面&#xff0c;包括硬件设施的配备、软件环境的搭建、课程资源的开发、师资力量的培养以及实践教学体系的完善等。 打造特色&#xff0c;对接生产 社会经济与产业的…

2009NOIP普及组真题 1. 多项式输出

线上OJ&#xff1a; 一本通传送门&#xff1a; 核心思想&#xff1a; 逐一读入&#xff0c;逐一处理 step1、先输出符号 如果a小于0&#xff0c;则不管在哪个位置&#xff0c;都要输出负号&#xff1b; 如果a大于0&#xff0c;则除了最高次幂&#xff0c;其他都输出号 step2、…

给网站网页PHP页面设置密码访问代码

将MkEncrypt.php文件上传至你网站根目录下或者同级目录下。 MkEncrypt.php里面添加代码&#xff0c;再将调用代码添加到你需要加密的页进行调用 MkEncrypt(‘123456’);括号里面123456修改成你需要设置的密码。 密码正确才能进去页面&#xff0c;进入后会存下cookies值&…