当前位置: 首页 > ai >正文

数据库表关系详解

一、一对多关系

特征:表A的一条记录对应表B的多条记录,表B的一条记录仅对应表A的一条记录
示例

  • 学生表(子表)
    | id | name | class_id | |-----|------|----------| |1001| 张三 | 111 | |1002| 张四 | 222 |

  • 班级表(父表)
    | id | name | |-----|---------| |111 | class1 | |222 | class2 |

操作要点

  1. 数据添加顺序:先父表(class)后子表(student)
  2. 数据删除顺序:先子表(student)后父表(class)
  3. 设计口诀:"一对多,两张表,多的表加外键"

查询案例:查找姓"张"学生的班级信息

SELECT s.id, s.name, c.name AS className
FROM student s
JOIN class c ON s.class_id = c.id
WHERE s.name LIKE '张%'


二、一对一关系

特征:表A与表B的记录严格一一对应
设计方案

  1. 唯一外键法(推荐)
    • 学生表:
      | id | name | |-----|------| |1001| 张三 |

    • 学生卡表(添加唯一约束):
      | id | name | student_id | |-----|-------|------------| |111 | card1 | 1001 |

查询案例:查询张三的学生卡信息

SELECT * 
FROM card c
JOIN student s ON c.student_id = s.id
WHERE s.name = '张三'


三、多对多关系

特征:表A与表B的记录可相互对应多条
示例

  • 学生表
    | id | name | |-----|------| |1001| 张三 |

  • 课程表
    | id | name | |-----|-------| |111 | Java |

  • 关系表(核心组件)
    | student_id | course_id | |------------|-----------| |1001 |111 |

操作要点

  1. 数据添加顺序:先父表(student/course)后关系表
  2. 数据删除顺序:先关系表后父表
  3. 设计口诀:"多对多,三张表,关系表加外键"

查询案例:查找姓"张"学生选修的课程

SELECT s.id, s.name, c.name
FROM student s
JOIN student_course_relation scr ON scr.student_id = s.id
JOIN course c ON scr.course_id = c.id
WHERE s.name LIKE '张%'


关键总结

  1. 关系判断:明确表间关系是编写正确SQL的前提
  2. 操作顺序
    • 一对多:父表先增后删
    • 多对多:关系表最后操作
  3. 设计口诀
    • 一对多:两张表,多表加外键
    • 多对多:三张表,关系表存外键

http://www.xdnf.cn/news/7872.html

相关文章:

  • URL 类知识点详解
  • Python入门手册:正则表达式的学习
  • 代理IP在市场分析与用户画像研究中的应用解析
  • spring cloud alibaba-Geteway详解
  • 禁忌搜索算法:从原理到实战的全解析
  • 现代人工智能系统的实用设计模式
  • Science Advances | MIST:一种新型深度学习框架可解释的单细胞T细胞多组学整合分析工具
  • 基于Java( GUI )实现多人在线聊天软件
  • UE5.6新版本—— 动画光照系统重点更新
  • 3.2.3
  • SMT贴片工厂核心工艺与质量控制解析
  • LeetCode-链表-合并两个有序链表
  • GO语言学习(七)
  • 野火RK3588部署yolov8
  • 【notepad++如何设置成中文界面呢?】
  • 解决使用HBuilder X开发时uView组件不生效的问题
  • python爬虫和逆向:百度翻译数据采集的几种方式
  • Spring Boot AI 之 Chat Client API 使用大全
  • 前端面试题
  • C# AOP编程
  • 【亲测有效】Ubuntu22.04安装黑屏重启进入系统卡死
  • 如果有三个服务实例部署在三台不同的服务器上,这三个服务实例的本地缓存,是存储一模一样的数据?还是各自只存一部分?
  • 《易经》的数学表达:初级版和高级版
  • 回溯算法——排列篇
  • 新导游入行规范与职业发展指导
  • auto关键字解析
  • 时源芯微|π型LC滤波电路
  • 力扣面试150题--填充每个节点的下一个右侧节点指针 II
  • SPI协议软件实现 W25QXX flash 存储器
  • 【写在创作纪念日】基于SpringBoot和PostGIS的各省东西南北四至极点区县可视化