2 sinat 34041300 sinat_34041300 于 2016.03.01 18:21 提问

数据库两张表多对多关系为什么用中间表而不用相互外建

数据库两张表多对多关系为什么用中间表而不用相互外建,菜鸟求指点

2个回答

qq_27704715
qq_27704715   2016.03.01 18:27
已采纳

如果用外键去做,你想想你的SQL语句查询会乱成什么样,还有就是查询结果a表包括b表的数据,b表包含a表的数据,
数据库一层一层查询下去可能出现死循环当机的,而通过外键,你每次查询都是一个对应两个表的两个list集合。而不是无穷无尽的查询

sinat_34041300
sinat_34041300 谢谢,我建个表体会一下
2 年多之前 回复
owen1759
owen1759   2016.03.01 19:38

不要光看着书在那空想,你试一下就知道想只用两个表来表达多对多关系根本是办不到的事情,除非你连范式都不要了。因为多对多关系的条目数是两者条目数相乘的。
我现在给你一个“学生选课表”,你看要怎样改才能把中间表去掉?
学号 姓名
1 张三
2 李四
3 王五
科目号 科目
1 语文
2 数学
3 英语
选课表
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
多表设计之间的关系;一对一,一对多,多对多
5 多表设计之间的关系 一对多的关系:例如 一个部门对多个员工,一个员工只能属于一个部门 多对多的关系:例如 学生选课,一个学生可以选多门课程,一门可能可以被多个学生选择 一对一的关系:例如 一个人只能有一个身份证,一个身份证只能有一个人 6 表与表一对多的关系: 在一对多时 多的表中添加一个外键,用来和一的表的主键。产生联系。 7 多对多关系介绍: 多对对建表原则:创建第三张表
ssh开发中多对多关系建表
使用hibernate框架时,如果需要用到多对多建表,会出现第三张表只有2个外键的情况,不符合实现的情况      解决办法:把多对多改成2个一对多。      例子:学生-课程是多对多的关系,一个学生可以选修多门课程,一门课程可以被多个学生选修。      因此,可以创建第三张表,学生选课表,可以有其他字段,比如成绩...。一个学生可以有多条选课的记录,但是一条选课记录只有一个学生
多对多中间表的不使用联合主键,自己持有Id
问题是这样的 在ORACLE数据库中存在一个多对多的的关系,即LinkManage(链接表),Organ(机构表),中间建有一个中间表LinkOrgan(链接-机构表),中间表不仅持有多方的ID为外键,并且有自己的Id属性(不是联合主键),还有自己的Status(状态)属性,CreatTime(创建时间),UpdateTime(更新时间)之类的属性。        单纯的在多对多方建立关系,在保
数据库关联映射建表图示(一对多、多对多)
数据库关联映射建表图示(一对多、多对多) ~总结一下数据库的 一对多、多对一、一对一、多对多 关系 以及对应的建表方式~ 关联映射:一对多/多对一 存在最普遍的映射关系,简单来讲就如球员与球队的关系; 一对多:从球队角度来说一个球队拥有多个球员 即为一对多 多对一:从球员角度来说多个球员属于一个球队 即为多对一 数据表间一对多关系如下图:
数据库多对多关系的表如何采用左连接查询
例如病人表(patient)和保险公司表(insurance)是一个多对多的关系,它们的关系通过中间表(insure)来体现。中间表(insure)储存病人的主键id和保险公司的主键company 那么请列出所有保险公司的名字,以及在该保险公司投保的所有病人的id以保险公司为基表进行左联接查询: select i.company,p.id ,i.* from insurance i
两张表(多对多关联)操作 with Spring Boot, Spring Data JPA, H2
转自:http://blog.csdn.net/lewis_007/article/details/53006602 这里通过一个完整的例子展示如何通过 JPA 对两张表(多对多关联)进行增删改查操作。 前提 JDK 8+Maven 3+ 表结构 例子 创建 Maven 项目 pom.xml project xmlns="http:
mybatis多对多关联,向关联表插入数据方法
mybatis多对多关联,向关联表插入数据方法: 先向主表插入数据后,根据当前插入数据的ID,来向中间表插入数据 主要sql:   useGeneratedKeys="true" keyProperty="srId"> insert into sys_role(sr_name,sr_stats,sr_describe,um_id,sr_create_time,sr_typ
hibernate之多对多映射操作中间表
hibernate之多对多映射操作中间表
Mybatis 多对多表关联
中间表实现  下面的例子让新手看不错。可以改进的一点是           1、不必建立 关联对象实体,可以用map传递两个id进去           2、文章的resultMap 继承和 查询配置 比较清楚,可以借鉴         mybatis3.0添加了association和collection标签专门用于对多个相关实体类数据进行级联查询,但仍不支持多
关于数据表多对多关联的理解
多对多的情况需要借助第三张表中间表middle来进行查询 中间表middle有如下字段 id,picture_id,product_id 两个需要多对多关联的表为picture,product表 这样product表只需查询中间表middle就能找所有指定product_id的picture_id 再通过查询到picture_id 去找到指定图片。 同样要知道一张图片属于哪些商品 只需