【JavaWeb】Day40.MySQL概述——多表设计(一对多)

多表设计

项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种:

  •  一对多(多对一)
  •  多对多
  •  一对一

一对多

1.表设计

创建新的数据库,将多表设计存在新数据库下。在创建新的部门表单,员工和部门之间是一对多的关系。

-- 部门表
create table tb_dept
(
    id int unsigned primary key auto_increment comment '主键ID',
    name varchar(10) not null unique  comment '部门名称',
    create_time datetime not null comment '创建时间',
    update_time datetime not null comment '修改时间'
) comment '部门表';

员工表 - 部门表之间的关系:

一对多关系实现:在数据库表中多的一方,添加字段,来关联属于一这方的主键。

2.外键约束

表结构创建完毕后,我们看到两张表的数据分别为:

现在员工表中有五个员工都归属于1号部门(学工部),当删除了1号部门后,数据变为:

1号部门被删除了,但是依然还有5个员工是属于1号部门的。 此时:就出现数据的不完整、不一致了。

 所以目前上述的两张表(员工表、部门表),在数据库层面,并未建立关联,所以是无法保证数据的一致性和完整性的。

想解决上述的问题呢,我们就可以通过数据库中的 **外键约束** 来解决。

外键约束:让两张表的数据建立连接,保证数据的一致性和完整性。  对应的关键字:foreign key

外键约束的语法:

方式一:创建表时指定

create table 表名(

字段名    数据类型,

...

 [constraint]   [外键名称]  foreign  key (外键字段名)   references   主表 (主表列名)  

);

方式二:建完表后,添加外键

alter table  表名  add constraint  外键名称  foreign key(外键字段名)

references 主表(主表列名);

我们就为员工表的dept_id 建立外键约束,来关联部门表的主键。

```mysql
-- 修改表: 添加外键约束
alter table tb_emp  
add  constraint  fk_dept_id  foreign key (dept_id)  references  tb_dept(id);
```

图形化界面操作:

外键约束(foreign key):保证了数据的完整性和一致性。

物理外键和逻辑外键:

 物理外键

  - 概念:使用foreign key定义外键关联另外一张表。

  - 缺点:

    - 影响增、删、改的效率(需要检查外键关系)。

    - 仅用于单节点数据库,不适用与分布式、集群场景。

    - 容易引发数据库的死锁问题,消耗性能。

 逻辑外键

  - 概念:在业务层逻辑中,解决外键关联。

  - 通过逻辑外键,就可以很方便的解决上述问题。

       在现在的企业开发中,很少会使用物理外键,都是使用逻辑外键。 甚至在一些数据库开发规范中,会明确指出禁止使用物理外键 foreign key 。

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

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

相关文章

【机器学习算法】决策树和随机森林在计算机视觉中的应用

前言 决策树和随机森林在计算机视觉中有着广泛的应用。决策树作为一种简单而强大的分类模型,可以用于图像分类、目标检测、特征提取等任务。它能够根据图像的特征逐层进行判断和分类,从而实现对图像数据的智能分析和理解。随机森林作为一种集成学习方法&…

Tree-RAG工作流程及实体树应用介绍

引言 T-RAG方法基于将检索增强生成(Retrieval-Augmented Generation,简称RAG)架构与开源经过微调的大型语言模型(Large Language Model,简称LLM)以及实体树向量数据库相结合。这种方法的重点在于上下文检索…

001-NodeJs全局对象

概念 node是一个运行js的平台,在node中,用global对象取代了Window这个对象。 node中的repl环境可以执行js,通过命令node进入到repl环境。repl环境类似于Chrome的开发人员工具。 全局对象global 可以参考一下它的文档global全局对象 node版本介绍&am…

Tecplot导出流场Movie

本人最近想利用Tecplot导出流场计算的视频,找了以下两种方法:1、直接一次性打开所有文件,导出视频;2、利用脚本每次打开一个文件,导出其照片,最后合成视频。 方法一 对于文件内存少的情况,自然…

idea中输入法被锁定如何清除

今天遇到一个问题?idea中输入法被锁定了,无论怎么切换输入法,切换中英文,在idea中输出的均为英文内容,该如何解决呢?(idea官网:JetBrains: 软件开发者和团队的必备工具) …

【Java】SpringBoot快速整合mongoDB

目录 1.什么是mongoDB? 2.Docker安装mongoDB 3.SpringBoot整合mongoDB步骤 4.验证 1.什么是mongoDB? MongoDB是一种非关系型数据库,被广泛用于大型数据存储和分布式系统的构建。MongoDB支持的数据模型比传统的关系型数据库更加灵活&#x…

web自动化测试系列-selenium常用方法定位(五)

目录 1.selenium的定位方法 2.操作案例 3.实现代码 前面我们介绍了html页面元素主要是通过标签和属性来进行定位 ,只要满足唯一,无论是标签还是属性 ,都能进行定位 。当然 ,我们要通过selenium来进行定位 ,同样还是…

wpf下如何实现超低延迟的RTMP或RTSP播放

技术背景 我们在做Windows平台RTMP和RTSP播放模块对接的时候,有开发者需要在wpf下调用,如果要在wpf下使用,只需要参考C#的对接demo即可,唯一不同的是,视频流数据显示的话,要么通过控件模式,要么…

使用脚本部署openstack平台

两台虚拟机,compute和controller computer的节点,内存4G,硬盘50G,网络要在虚拟机设置这里添加一个网络适配器,第一个是主机模式192.168.10.0,第二个是NAT模式192.168.20.0,再进入网络编辑器里编…

多输入多输出 | Matlab实现XGboost多输入多输出预测

多输入多输出 | Matlab实现XGboost多输入多输出预测 目录 多输入多输出 | Matlab实现XGboost多输入多输出预测预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 Matlab实现XGboost多输入多输出预测 1.data为数据集,10个输入特征,3个输出变量…

【绘图案例-获取裁剪过后的图片 Objective-C语言】

一、获取裁剪过后的图片 1.就是,把一张方形的图片,变成一张圆形的图片,然后,把它保存在相册里边儿, 我们刚刚学了保存到沙盒,是吧,现在来学保存到相册, 我们新建一个项目, Name:11-获取裁剪过后的图片, 我们还是在ViewController里面, 把下面这个方法删掉, 在下…

算法刷题应用知识补充---数论

这里写目录标题 快速幂求a^k%p题结 快速幂求逆元题结 扩展欧几里得求逆元题结 排列组合题结二级目录 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 快速幂求a^k%p 题 结 主要用到a的k次方,可以用多个a的…

RX4901CE自带SPI接口,适合用在需高精度和快速响应的设备

传统的模拟温度补偿晶振采用热敏电阻等元器件来检测环境温度,将温度信息做相应变换后控制晶振的输出频率用来实现稳定输出,但是这种做法频率补偿精度有限。伴随目前电路计算频率越来越高,更多工业级的高时间精度和快速时间响应的应用出现&…

实验5 流程图和盒图ns图

一、实验目的 通过绘制流程图和盒图,熟练掌握流程图和盒图的基本原理。 能对简单问题进行流程图和盒图的分析,独立地完成流程图和盒图设计。 二、实验项目内容(实验题目) 1、用Microsoft Visio绘制下列程序的程序流程图。 若…

代码整洁之道【3】--注释

传统的印象里,良好的代码都是需要丰富的注释的。看完《代码整洁之道》注释这章之后,发现根本不是这个样子: 什么也比不上放置良好的注释有用。什么也不会比乱七八糟的注释更有本事搞乱一个模块。 什么也不会比陈旧的、提供错误信息的注释更有…

Unity DOTS 入门(2) SubScene和Bake

SubScene 由于Unity原本的Scene无法使用ECS,所以需要SubScene来存放ECS模式下的内容可以正常的像普通的开发模式一样,在SubScene里面来添加GameObject, MonoBehaviour然后Unity将这个SubScene里面的物体,全部baking(烘培)出来,转…

Windows服务器任务计划启动 Java 应用遇到的error:解决错误ERROR0x2331

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

vs2022启动cmake项目(qt+c++)

1.本工程,如图,1个cmakelist.txt3个文件 2.启动vs 3.选择文件夹 4.进入这个页面,就说明配置没问题 5.启动 6.最后会自己生成其他文件

crc编码流水传输

目标 首先我们要确定目标就是输入两位错的时候我们需要重新传输 这其中还分了地址回位,不显示输出,各位清零操作 我们再去看一下这个的详细封转 这么做是有问题的,没有将之前的数据清零 我们做完清零操作以后我们提交一下 发现只需要一…

从零开始学Spring Boot系列-SpringApplication

SpringApplication类提供了一种从main()方法启动Spring应用的便捷方式。在很多情况下, 你只需委托给 SpringApplication.run这个静态方法 : SpringBootApplicationpublic class SpringbootLearningApplication {public static void main(String[] args) …