数据库-表关系
1|0分表:
1|1为什么要分表?
一个表中 要存储个人信息又要存储部门信息 会导致大量的数据冗余
所有数据存放在同一个表中 将导致以下几个问题
1.浪费空间 不致命
2.结构混乱
3.修改数据时 如果有一百个员工 那就要该一百次 扩展性极差
通过分表来解决
分表又造成新的问题 如何再将数据对应起来?
为什么需要对应起来是因为两张表的数据具备这某种关系
到底是什么关系呢?
多对一的关系
2|0分析关联关系
如何确定表之间的关系 需要从实际需求中分析
第一步:
从员工的角度来考虑
多个员工是不是可以属于同一个部门?
员工的多条记录是否对应部门的一条记录?
如果是 则可以确定 员工与部门是多对一
第二步:
从部门的角度来考虑
多个部门是不是可以有同一个员工?
部门多条记录是否对应员工的一条记录?
都不是 而是一个部门对应多个员工
也就是 部门与员工之间是一对多
最终我们发现 多个员工对应一个部门 一个部门对应多个员工
称之为单向多对一
如何在数据库中表示这种关系?
我们可以员工表中保存部门表的编号
3|0外键约束
问题:此时 我们的表之间存在关联但是是逻辑上的关联 并没有物理上的关联
换句话说 员工中可以插入不存在的部门编号
如何使其具备物理关联(硬性的关联)?
方案:
使用外键 foreign key
3|1语法:
3|2主从表关系
注意要建立外键关联,必须先创建主表
先有部门 后又员工 员工属于部门 部门拥有员工 所以 主表是部门 从表是员工
3|3约束作用:
此时我们在执行添加 更新 删除时都会受到外键的约束
比如
1.员工表中添加一个不存在的部门id
2.修改某个部门的id
3.删除某个部门的数据
以上三种操作都会报错
1.必须已经存在的部门id才能出现在员工表中
2.无法修改 除非把员工全删掉
3.需要先删除员工 才能删除部门
处理起来都非常麻烦
能不能让主表和从表之间的更删除同步进行?
如果你是mysql开发者 你应不应该提供这样的功能?
必须的 这就是级联操作
4|0级联操作
有两种
4|11.级联更新
指的是主表更新时 从表同步更新
4|22.级联删除
指的是主表删除时 从表同步删除
语法:
验证级联操作
5|0多对多
实例分析 什么情况下会出现多对多的关系
学生表和老师表
多对多的关系本质上是什么?
是双向的多对一
如何在数据库中表示这种关系?
使用外键是不行的,需要创建第三张表专门用于存储关系
这个第三张表 如何体现关系?
在其中存储学生和老师的id即可 并且将它们作为外键关联到学生和老师表
为了去除重复的关系数据 可以给关系表添加主键约束 联合两个外键
6|0一对一
实例分析:
客户表 与 学生表
一个客户对应一个学生 或没有成为学生
一个学生 必然只对应一个客户
如何表示这种对应关系 ?
使用外键
那么外键应该加到哪张表中呢?
因为是先有客户才有学生 所以 客户是主表 学生是从表 应该加在学生表中
我们已经知道一个学生只对应一个客户 ,但是有可能你写的时候写错了,写了一个重复的客户id
此时将会造成数据错乱 如何解决呢?
给外键字段再加上 唯一性约束
7|0三.复制表
复制数据和表结构,但不会复制key
只想要copy表结构怎么弄?
给一个不成立的条件这样的话就查不到任何数据 ,只能复制表结构
蠕虫复制
__EOF__

本文链接:https://www.cnblogs.com/yangyuanhu/p/11173481.html
关于博主:水平有限,若有错误,敬请指出,必在第一时间处理,以免误导更多人
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人