关系型数据库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.hqwc.cn/news/675323.html

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

相关文章

Linux —— 信号(3)

Linux —— 信号(3) Core dump为什么core默认是被关闭的阻塞信号信号其他相关常见概念信号递达信号未决信号阻塞两者的区别信号的结构 信号集操作函数一个简单使用例子sigpending的使用例子 我们今天接着来了解信号: Core dump 大家不知道有…

6.移除元素

文章目录 题目简介题目解答解法一:双指针代码:复杂度分析: 解法二:双指针优化代码:复杂度分析: 题目链接 大家好,我是晓星航。今天为大家带来的是 相关的讲解!😀 题目简…

6W 1.5KVDC. 单、双输出 DC/DC 电源模块——TP2L-6W 系列

TP2L-6W系列是一款高性能、超小型的电源模块,2:1电压输入,输出有稳压和连续短路保护功能,隔离电压为1.5KVDC、作温度范围为–40℃到85℃。特别适合对输出电压的精度有严格要求的地方,外部遥控功能对您的设计又多一项选择&#xff…

25考研英语长难句Day02

25考研英语长难句Day02 【a.词组】【b.断句】 如果你是你讲话对象中的一员,你就能了解你们大家共同的经历和问题,你也可以顺便评论一下食堂里难吃的食物或董事长臭名昭著的领带品味。 【a.词组】 单词解释addressv. 演说, 演讲;…

RS2103XH 功能和参数介绍及规格书

RS2103XH 是一款单刀双掷(SPDT)模拟开关芯片,主要用于各种模拟信号的切换和控制。下面是一些其主要的功能和参数介绍: 主要功能特点: 模拟信号切换:能够连接和断开模拟信号路径,提供灵活的信号路…

【教学类-50-14】20240505“数一数”图片样式12:数一数(12个“人物”图案)

作品展示 背景需求: 前文做了“”材料”图片的数一数学具,效果不错, https://blog.csdn.net/reasonsummer/article/details/138466325https://blog.csdn.net/reasonsummer/article/details/138466325 为了让图案内容更丰富,我又…

信创 | 信创产业数字化转型与升级:路径规划与实践!

信创产业的数字化转型与升级路径,主要围绕着构建国产化信息技术软硬件底层架构体系和全周期生态体系,解决核心技术关键环节“卡脖子”的问题,以推动中国经济数字化转型的平稳健康发展。 一、信创产业的发展趋势包括: 加强国产信息…

算法提高之能量项链

算法提高之能量项链 核心思想&#xff1a;区间dp 通过观察发现可以将n个珠子最后的n1个数看作石子 合并石子 在l~r的范围内 找k作隔断 #include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N 110,M N<<…

Java 线程池 ( Thread Pool )的简单介绍

想象一下&#xff0c;你正指挥着一支超级英雄团队&#xff0c;面对蜂拥而至的敌人&#xff08;任务&#xff09;&#xff0c;不是每次都召唤新英雄&#xff08;创建线程&#xff09;&#xff0c;而是精心调配现有成员&#xff0c;高效应对。这就是Java线程池的魔力&#xff0c;…

Python运维-日志记录、FTP、邮件提醒

本章目录如下&#xff1a; 五、日志记录 5.1、日志模块简介 5.2、logging模块的配置与使用 六、搭建FTP服务器与客户端 6.1、FTP服务器模式 6.2、搭建服务器 6.3、编写FTP客户端程序 七、邮件提醒 7.1、发送邮件 7.2、接收邮件 7.3、实例&#xff1a;将报警信息实时…

[1726]java试飞任务规划管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java试飞任务规划管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql…

【C++泛型编程】(二)标准模板库 STL

文章目录 标准模板库 STL容器算法迭代器仿函数/函数对象适配器分配器示例 标准模板库 STL C 的标准模板库&#xff08;Standard Template Library&#xff0c;STL&#xff09;旨在通过模板化的设计&#xff0c;提供一种通用的编程模式&#xff0c;使程序员能方便地实现和扩展各…