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

news2025/6/27 12:29:46

多表设计

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

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

一对多

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 。

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

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

相关文章

html页面跳转的方法

1、加在head里面 <head> <meta http-equiv"refresh" content"1;urlhttps://ha.huatu.com/zt/hnsylkseo/?"> </head> 2、加在body里面 在body里用js <script language"javascript" type"text/javascript">…

掌握网络抓取技术:利用RobotRules库的Perl下载器一览小红书的世界

引言 在信息时代的浪潮下&#xff0c;人们对于获取和分析海量网络数据的需求与日俱增。网络抓取技术作为满足这一需求的关键工具&#xff0c;正在成为越来越多开发者的首选。而Perl语言&#xff0c;以其卓越的文本处理能力和灵活的特性&#xff0c;脱颖而出&#xff0c;成为了…

el-table 设置固定列导致行错位的解决方案

element 官方给出的解决办法是使用doLayout&#xff0c;使用doLayout重新加载一下table就好了。 updated() {// tableRef是表格的ref属性值if (this.$refs.tableRef&& this.$refs.tableRef.doLayout) {this.$refs.tableRef.doLayout();}},调整前后效果对比&#xff1a…

LeetCode Meditations:合并 K 排序列表

描述 合并K分类列表 状态&#xff1a; 您有一系列 k 链接-列表 lists &#xff0c;每个链接-列表按升序排序。 合并所有链接-列表为一个排序的链接-列出并返回。 例如&#xff1a; Input: lists [[1, 4, 5], [1, 3, 4], [2, 6]] Output: [1, 1, 2, 3, 4, 4, 5, 6] Explanatio…

web APIs总结(2)

1. 页面滚动事件 很多网页需要检测用户把页面滚动到某个区域后做一些处理&#xff0c; 比如固定导航栏、返回顶部事件名&#xff1a;scroll监听某个元素的内部滚动直接给某个元素加即可 获取位置 scrollLeft和scrollTop &#xff08;属性&#xff09; &#xff08;注&#xf…

git did not exit cleanly (exit code 128)解决方案

当您在使用Git时遇到 “git did not exit cleanly (exit code 128)” 这样的错误消息时&#xff0c;通常表示Git在执行某个操作时遇到了问题。这个错误代码128通常与远程操作有关&#xff0c;可能是由于网络问题、权限问题或其他原因导致的。 问题 以下是一些可能的解决方法&a…

Harmony鸿蒙南向驱动开发-SDIO

SDIO&#xff08;Secure Digital Input and Output&#xff09;由SD卡发展而来&#xff0c;与SD卡统称为MMC&#xff08;MultiMediaCard&#xff09;&#xff0c;二者使用相同的通信协议。SDIO接口兼容以前的SD卡&#xff0c;并且可以连接支持SDIO接口的其他设备。 运作机制 …

Java项目:基于Springboot+vue实现的中国陕西民俗前后台管理系统设计与实现(源码+数据库+毕业论文)

一、项目简介 本项目是一套基于Springbootvue实现的中国陕西民俗管理系统设计与实现设 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界…

Python学习之-pyechart详解

前言&#xff1a; 什么是pyechart&#xff1f; Pyecharts 是一个用于生成 Echarts 图表的 Python 库。Echarts 是一个由百度开源的数据可视化工具&#xff0c;它提供的图表种类丰富&#xff0c;交互性强&#xff0c;兼容性好&#xff0c;非常适合用于数据分析结果的展示。Pyec…

Golang | Leetcode Golang题解之第19题删除链表的倒数第N个结点

题目&#xff1a; 题解&#xff1a; func removeNthFromEnd(head *ListNode, n int) *ListNode {dummy : &ListNode{0, head}first, second : head, dummyfor i : 0; i < n; i {first first.Next}for ; first ! nil; first first.Next {second second.Next}second.N…

开启未来之门:Victoria VR 与 OpenAI 整合,引领 Web3 AI+AR 风潮

加密市场一直是科技创新的前沿阵地。虚拟现实&#xff08;VR&#xff09;技术和人工智能&#xff08;AI&#xff09;被认为是引领未来的重要技术之一&#xff0c;Web3 自然不会缺席这场足以改变人们生活方式的变革&#xff01; 2月份&#xff0c;Apple Vision Pro 的发售迅速引…

Jmeter的json提取器(包括提取一个参数的所有值,提取多个参数

jmeter的json提取器&#xff08;包括提取多个参数&#xff0c;提取一个参数的所有值&#xff09;https://www.cnblogs.com/jxial/p/15175314.html 在工作中经常遇到这种情况&#xff0c;就是下一个接口需要引用上一个接口返回的值&#xff0c;普遍的方法就是运用后置提取器 常…

智慧公厕中的大数据、云计算和物联网技术引领未来公厕管理革命

现代社会对于公共卫生和环境保护的要求越来越高&#xff0c;智慧公厕作为城市基础设施建设的重要组成部分&#xff0c;正引领着公厕管理的革命。随着科技的不断进步&#xff0c;大数据、云计算和物联网技术的应用为智慧公厕带来了全新的可能性&#xff0c;&#xff08;ZonTree中…

uniapp 上传视频到阿里云之后回显视频获取视频封面

uniapp 上传视频到阿里云之后回显视频获取视频封面 官网的解决方案 1.initial-time Number 指定视频初始播放位置&#xff0c;单位为秒&#xff08;s&#xff09;。 没什么卵用 2.使用 uni.createVideoContext(“myVideo”, this).seek(number)。 没什么卵用 <video :id&quo…

zabbix企业级监控平台

zabbix部署 安装源 重新创建纯净环境&#xff0c;利用base克隆一台虚拟机server1 给server1做快照&#xff0c;方便下次实验恢复使用 进入zabbix官网https://www.zabbix.com rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm …

Idea集成Docker的快捷部署

Idea集成Docker的快捷部署 配置Docker远程访问1.1 修改 `/lib/systemd/system/docker.service`1.2 替换`ExecStart`1.3 重启docker服务1.4 监听端口是否被占用1.5 服务器防火墙开启2375端口1.6 测试配置IDEA2.1 下载docker插件2.2 添加docker连接2.3 配置容器镜像加速器2.4 配置…

SQL注入sqli_labs靶场第二题

解题思路与第一题相同 ?id1 and 11 和?id1 and 12进行测试如果11页面显示正常和原页面一样&#xff0c;并且12页面报错或者页面部分数据显示不正常&#xff0c;那么可以确定此处为数字型注入。 联合查询&#xff1a; 猜解列名数量&#xff1a;3 ?id1 order by 4 判断回显…

南京航空航天大学-考研科目-513测试技术综合 高分整理内容资料-01-单片机原理及应用分层教程-单片机有关常识部分

系列文章目录 高分整理内容资料-01-单片机原理及应用分层教程-单片机有关常识部分 文章目录 系列文章目录前言总结 前言 单片机的基础内容繁杂&#xff0c;有很多同学基础不是很好&#xff0c;对一些细节也没有很好的把握。非常推荐大家去学习一下b站上的哈工大 单片机原理及…

【STL】list

目录 1. list的使用 1.1 list的构造 1.2 list iterator的使用 1.3 list capacity 1.4 list element access 1.5 list modifiers 1.6 list的迭代器失效 2. list的模拟实现 3. list与vector的对比 1. list的使用 1.1 list的构造 1.2 list iterator的使用 1. begin与end为…

性能优化原则

相关链接&#xff1a;【运行环境】加载资源的形式 性能优化 1 性能优化原则 多使用内存、缓存或其他方法 减少CPU计算量&#xff0c;减少网络加载耗时 &#xff08;适用于所有编程的性能优化----空间换时间&#xff09; 2 从何入手 性能优化-让加载更快 减少资源体积&#x…