数据库表的三种关系,通俗易懂的讲解

简介: 本文通俗讲解数据库表的三种核心关系:一对多(如班级与学生)、一对一(加唯一约束的一对多)、多对多(需中间表实现)。含定义、约束规则、SQL示例及图解,助初学者快速掌握关系建模要点。

前言
本文来讲解数据库表的三种关系,旨在帮助读者更好的预习,理解以及复习😊

个人主页:艺杯羹

系列专栏:MySQL

一. 什么是数据库表的关系

数据库表的关系分为三种

关系类型

描述

约束

一对多

一表一条数据对应另一表多条

外键在多方,可重复、有空值

一对一

两表数据一 一对应

外键设唯一约束,先删外键后删主键

多对多

两表对象互成一对多

中间表两列联合主键,分别外键参照主表

二. 一对多关系

一种对象与另一种对象是 一 一 对应关系
一对多关系是建立在两张表之间的关系。一个表中的一条数据可以对应另一个表中的多条数据。
可以添加外键约束保证数据的参照完整性,外键一直都是在多方。
注:外键允许重复,允许含有空值

例如学生表和班级表可以是一个一对多的关系
可以这么理解:一个班级对应着多个学生,就是一对多的关系

实例:  

  1. 创建一个班级表
create table calss_table(
  -- 班级id,并设置为主键和自动增长  
  class_id int primary key auto_increment,
  -- 班级名称  
  calss_name varchar(50) 
);
  1. 创建一个学生表
create table student_table(  
  student_id int primary key auto_increment,
  student_name varchar(50),
  student_class_id,
  -- 对student_class_id设置外键
  -- 链接到 class_table 表中的 calss_id 的主键  
  foreign key(student_class_id) references class_table(class_id)
);

班级表通过外键来和学生表来建立连接

三. 一对一关系

简单来说就是:一种对象与另一种对象是一一对应关系
一对一关系是建立在一对多的基础之上,一个表中的一条数据只能对应另一个表中的一条数据。
那么这不就和唯一约束很类似了吗,所以可以用唯一约束,就更好的维护了参照完整性

tips:如果添加的外键约束,那么删除数据时,一定是先删除有外键一方的数据

还是拿刚刚的学生表和班级表来举例
可以这么理解:
一个学生只能对应一个教室,而一个教室只能对应一个唯一的学生

  1. 创建班级表
create table class_table (
    -- 班级id,作为主键并自动递增
    class_id int primary key auto_increment, 
    -- 班级名称
    class_name varchar(50) 
);
  1. 创建学生表
create table student_table(  
  student_id int primary key auto_increment,
  student_name varchar(50),
  -- 添加unique约束实现一对一
  student_class_id int unique,
  -- 对student_class_id设置外键
  -- 链接到 class_table 表中的 calss_id 的主键  
  foreign key(student_class_id) references class_table(class_id)
);

看到和一对多的区别没,就是在于是否有unique的唯一约束

这里的意思就是,每个学生只能对应一个班级

四. 多对多关系

也就是两个对象彼此都是一对多的关系

这里和前两个关系不同的是,这里需要借助中间表来实现
中间表里建立两个列,然后需要用这两个列作为这个表的联合主键,然后每个列在作为外键参照各自的表的主键
拿学生和课程之间来举例就是:一个学生可以选修多门课程,一个课程能被选择多个学生
实例:  

  1. 创建学生表,课程表,以及中间表
-- 创建学生表
create table students (
    -- 学生id,作为主键,自动递增
    student_id int primary key auto_increment, 
    -- 学生姓名
    student_name varchar(10) 
);
-- 创建课程表
create table courses (
    -- 课程id,作为主键,自动递增
    course_id int primary key auto_increment, 
    -- 课程名称
    course_name varchar(20) 
);
-- 创建中间表
create table student_courses (
    -- 是外键,关联学生表的student_id
    student_id int, 
    -- 是外键,关联课程表的course_id
    course_id int, 
    -- 联合主键
    primary key (student_id, course_id), 
    foreign key (student_id) references students(student_id),
    foreign key (course_id) references courses(course_id)
);
  1. 插入数据并使用中间表来关联
-- 插入学生数据
insert into students (student_name) values ('艺杯羹'), ('小王');
-- 插入课程数据
insert into courses (course_name) values ('C语言'), ('java');
-- 在中间表插入关系数据,表示艺杯羹选了C语言和java,小王选了C语言
insert into student_courses (student_id, course_id) 
values 
(1, 1), (1, 2), (2, 1);

Tips:
插入数据:先插入两张主表的数据,再插入中间表的数据
删除数据:先删除中间表(即有外键的表),再删除两个主表
这就好像是先添加主键,再添加外键
删除:先删除外键数据再删除主键数据

关系图:

五. 总结

希望本文能够帮助到你(* ̄︶ ̄)

目录
相关文章
|
2月前
|
设计模式 Web App开发 人工智能
【AI】Agent 全栈进阶|系统化学习路线专题
描述 Agent 的概念、核心构成,规划出一套循序渐进的 Agent 开发学习路径,从大模型调用、工具调用、RAG、运行模式、记忆机制再到工程化调试,同时附上多款适合入门钻研的开源参考项目
2046 7
|
2月前
|
人工智能 安全 前端开发
基于 AgentScope 构建金融级智能体底座实战
金融级 AI 原生智能体底座白皮书发布。
|
3月前
|
人工智能
Qwen3.8抢先体验!正式版即将发布并开源!
千问Qwen3.8即将开源,参数达2.4T,进化速度以“天”计,实力媲美Fable 5。预览版Qwen3.8-Max已上线阿里Token Plan等平台,限时优惠:日间Credits低至1折,夜间更优,个人/团队版月付仅35元起!
5411 163
|
2月前
|
人工智能 JSON 自然语言处理
Vibe Coding实战:从零构建网页3D交互角色
本文详解Vibe Coding(氛围编程)在网页3D开发中的实践:以“2D→3D→网页”标准化流程为核心,结合腾讯混元3D生成高质量可动画模型,再用Three.js嵌入GLB文件实现交互式渲染,并提供完整代码、提示词模板及八大常见坑点解决方案,助力零基础快速落地3D网页应用。
310 0
Vibe Coding实战:从零构建网页3D交互角色
|
2月前
|
前端开发 Java 测试技术
Maven 之工程构建与依赖管理全攻略
本文系统讲解Maven核心知识:涵盖POM/JAR/WAR工程类型与标准目录结构;详解构建生命周期(validate→compile→test→package→install→deploy)及常用命令;深入解析本地/远程/中央仓库机制,并指导配置本地仓库路径、阿里云镜像及JDK版本。内容精炼实用,助开发者快速掌握Maven项目管理精髓。
165 1
Maven 之工程构建与依赖管理全攻略
|
2月前
|
机器学习/深度学习 自然语言处理 算法
为什么大模型不会读乱语序:从绝对座位号、高维时针到RoPE旋转位置编码全解析
本文深度解析大模型自注意力机制的时序盲区,揭示RoPE旋转位置编码如何通过复数旋转变二维向量为“高维时钟”,使相对距离自然浮现于内积计算中,并详解其支持百万Token长文本外推的几何原理与PyTorch实现。
154 1
为什么大模型不会读乱语序:从绝对座位号、高维时针到RoPE旋转位置编码全解析
|
1月前
|
存储 SQL 消息中间件
Agent 做了这么多轮重构,企业到底该留下什么?
本文整理自第 10 届 AI + 研发数字峰会(AiDD)北京站 TOP10 最佳演讲议题之一《Agent 开发范式演进:简化多源实时上下文构建》。
199 13
|
2月前
|
算法 安全 开发工具
Git文件状态管理:从基础到进阶的完整指南
本文详解Git五大文件状态(Untracked/Unmodified/Modified/Staged/Deleted)及其转换逻辑,涵盖状态查看、暂存、提交、删除、忽略配置、差异比较与文件还原等核心操作,助你精准掌控版本控制流程。
137 1
Git文件状态管理:从基础到进阶的完整指南
|
2月前
|
存储 算法 区块链
Web3与分布式账本全解析:从班长账本丢包、非对称加密到数据主权回归
本文以“班级记账”为喻,通俗解析Web2中心化与Web3分布式架构的本质差异,深入浅出阐释非对称加密、共识机制、智能合约三大核心技术,揭示数据主权如何从平台回归用户,助力理解去中心化信任的底层逻辑。
152 2
|
2月前
|
人工智能 运维 网络协议
全球分布式研发下的多云大模型治理实践(一):网络与系统底座篇
凌晨两点,Remote-SSH频繁断线,大模型API请求又收到一串陌生的403——问题往往不在代码,而在网络底座。本文分享宝商AI团队在MSP托管运维一线沉淀的跨境研发网络工程化方案:新加坡/东京灰度节点选址、Clean DNS解析层重构、TCP BBR内核级调优,附可量化验收标准,助力全球分布式团队把"总卡顿"变成"零阻断"。
107 1

热门文章

最新文章