热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

为什么多对多关系需要建立中间表_【数据库基础】为什么需要三张表之多对多表结构设计...

了解完一对一和一对多表结构设计,接下来一起了解一下多对多的表结构设计。同样,咱们先来想一般什么场景需要用到多对多。假如说咱们有一个叫订单和一个叫商品的这

了解完一对一和一对多表结构设计,接下来一起了解一下多对多的表结构设计。

同样,咱们先来想一般什么场景需要用到多对多。假如说咱们有一个叫订单和一个叫商品的这两张表,这两张表的关系,它其实就是一个多对多的关系。怎么理解?假如我双11产生了一个订单,这个订单里边有一本书,然后还有一个笔记本电脑,这就说明我这一个订单里边可以包含多个商品,另外,,不管是书还是笔记本电脑,它也有可能被其他的订单所购买?比如,张三他双11买了一本书,赵四他双11也产生了一个订单,他也可以买这本书,这就是一个多对多的关系,一个订单里边可能包含多个商品,而这一个商品也能被多个订单所购买。

咱们还可以想到一个场景,就是用户和和角色,一个用户可以拥有多个角色,比如我是一个管理员,这是我的一个角色,可能我也是一个普通的用户,或者我是一个游客,它是不是也属于一个角色?所以一个用户可以拥有多个角色。

再反过来想,咱们整个系统不可能只有一个用户,比如,现在又有一个新的用户,新的用户他也可能拥有这个角色?那么反过来说的话就是一个角色可以被多个用户所拥有。所以用户与角色之间也是一个多对多的关系。当然还有很多类似的场景,总之,如果以后出现了这样的一种场景的话,咱们就往多对多表结构方向设计上去靠拢。

了解了多对多的场景,下面接着说多对多建表的一个原则。就拿用户表和角色表来举例子。

咱们先说第1个问题,多对多表面上看是两张表,但是如果咱们真正的把表创建完,其实它是三张表结构,为什么是三张表呢,只要是多对多,咱们都需要给他创建一张叫中间表,这张中间表用来干嘛呢,用来存储这两个表中数据的关系的。下面就给大家来模拟一个建表的过程。

首先创建用户和角色这2张表:

2892bb1569494b4dcf5b3ccf4c61d380.png

搞定了这两张表,我们还得搞一张中间表来放这两张表数据的关系,取名叫用户角色中间表。

531c4f57c55f58af7556f7cc929e6794.png

3张表创建完了以后,为了让用户表和角色表建立一个多对多的关系,我们就要在用户表和角色表里面各创建1个主键,比如把用户ID设置为用户表主键,把角色ID设置为角色表主键;然后在中间表里面设置2个外键约束,把中间表里的用户ID设置为外键约束并且指向用户表主键(用户ID),同样把中间表里的角色ID设置为外键约束并且指向角色表主键(角色ID)。这样的话多对多的表结构就创建好了。添加数据如下:

43f551b9d9cb46aaeddb6510713c0ba1.png

通过中间表,我们就可以很清楚的知道:

1, 张三他同时拥有普通员工和管理员2种角色身份;

2, 管理员这个身份同时被张三和赵四所拥有。

这就是多对多表结构的设计方法,看起来是2张表,实际需要3张表。



推荐阅读
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • SQL中UPDATE SET FROM语句的使用方法及应用场景
    本文详细介绍了SQL中UPDATE SET FROM语句的使用方法,通过具体示例展示了如何利用该语句高效地更新多表关联数据。适合数据库管理员和开发人员参考。 ... [详细]
  • Navicat Premium 15 安装指南及数据库连接配置
    本文详细介绍 Navicat Premium 15 的安装步骤及其对多种数据库(如 MySQL 和 Oracle)的支持,帮助用户顺利完成软件的安装与激活。 ... [详细]
  • 深入理解 Oracle 存储函数:计算员工年收入
    本文介绍如何使用 Oracle 存储函数查询特定员工的年收入。我们将详细解释存储函数的创建过程,并提供完整的代码示例。 ... [详细]
  • 本文总结了2018年的关键成就,包括职业变动、购车、考取驾照等重要事件,并分享了读书、工作、家庭和朋友方面的感悟。同时,展望2019年,制定了健康、软实力提升和技术学习的具体目标。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • CSS 布局:液态三栏混合宽度布局
    本文介绍了如何使用 CSS 实现液态的三栏布局,其中各栏具有不同的宽度设置。通过调整容器和内容区域的属性,可以实现灵活且响应式的网页设计。 ... [详细]
  • IT项目管理过程中的方法、工具、技术
    工欲善其事,必先利其器。而对于一个软件开发项目,最重要的器就是方法,工具和技术。而这三要素中重要的又是方法论,方法是基础&# ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文介绍了如何使用jQuery根据元素的类型(如复选框)和标签名(如段落)来获取DOM对象。这有助于更高效地操作网页中的特定元素。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
author-avatar
dmcm0003
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有