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

数据库建立中间表的意义

数据库建立中间表的意义

中间表的使用,使得各个实体表之间相互独立,降低各个实体表之间的耦合性;
在企业开发中,不提倡在从表中建立外键来关联主表,因为那样的话,主表与从表的数据耦合性太高,不灵活;
所以使用中间表来存储实体表之间的关联后的组合数据
在这里插入图片描述

用户表与角色表之间的关系为一对多

我想查询id为2的用户所对应的多个角色;sql语句为:

SELECT r.*
FROM t_user_role ur LEFT JOIN t_user u ON u.id=ur.user_id
LEFT JOIN t_role r ON r.roleId=ur.role_id
WHERE ur.user_id = #{id};

用户和角色是一一对应的关系,为什么不直接在用户表中加一个角色的字段,而是另建一个中间关系表?

我的理解是一个用户可以有多个角色啊

是这样的:

一个人 可以拥有 多个角色
一个角色 也可以被多个人使用

多对多的关系 一般情况下是 需要建一个中间表去映射的。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【D3.js in Action 3 精译_018】2.4 向选择集添加元素
  • WordPress杂技
  • kotlin get set
  • RabbitMQ发布确认及交换机类型
  • SQL Server分布式查询:跨数据库的无缝数据探索
  • vite+vue3项目初始化搭建
  • 避免6大Python高级陷阱,让你的Python代码更优雅
  • 【React Hooks原理 - forwardRef、useImperativeHandle】
  • 【Apollo学习笔记】—— Cyber RT之创建组件, test ok
  • python Requests库7种主要方法及13个控制参数(实例实验)
  • Linux云计算 |【第一阶段】ENGINEER-DAY5
  • MyBatis-Plus的几种常见用法
  • HTML5大作业三农有机,农产品,农庄,农旅网站源码
  • C语言 | Leetcode C语言题解之第239题滑动窗口最大值
  • 线程安全性问题(一)
  • $translatePartialLoader加载失败及解决方式
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • HashMap剖析之内部结构
  • HTTP中的ETag在移动客户端的应用
  • leetcode-27. Remove Element
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • Python进阶细节
  • Web Storage相关
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 用简单代码看卷积组块发展
  • $(function(){})与(function($){....})(jQuery)的区别
  • (C++二叉树05) 合并二叉树 二叉搜索树中的搜索 验证二叉搜索树
  • (Charles)如何抓取手机http的报文
  • (done) 两个矩阵 “相似” 是什么意思?
  • (LeetCode) T14. Longest Common Prefix
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (ros//EnvironmentVariables)ros环境变量
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (二)延时任务篇——通过redis的key监听,实现延迟任务实战
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (接口封装)
  • (力扣)1314.矩阵区域和
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (三)mysql_MYSQL(三)
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (一)基于IDEA的JAVA基础10
  • (转)jdk与jre的区别
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • *p++,*(p++),*++p,(*p)++区别?
  • .net CHARTING图表控件下载地址
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET 中 GetProcess 相关方法的性能
  • .NET_WebForm_layui控件使用及与webform联合使用
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • @CacheInvalidate(name = “xxx“, key = “#results.![a+b]“,multi = true)是什么意思
  • @ConditionalOnProperty注解使用说明