精华内容
下载资源
问答
  • 2018-08-28 20:03:10

    2018年06月04日 16:35:57 阅读数:322更多
    个人分类: 数据库设计
    设计数据表,遇到一个很常见的情况。

    一、中间表-多对多关系的转化
    实际中,经常存在多对多关系。以订单和商品为例,一个订单对应多个商品,一个商品也对应多个订单。此时在将E-R图转化为关系模型时,需要引入中间表(也叫做连接表)。

    中间表包含两个实体表的主键,建立两张表沟通。中间表也可以有普通字段。例如商品数量,和每种商品总和。注意:要把他们与实体表中字段含义区分开。

    参考连接:https://zhidao.baidu.com/question/1732427061119828187.html

    二、中间表主键
    中间表的主键,可以是两个外键作为联合主键,也可以是再增加一个主键字段。

    由于我的表中除了两个外键,还有普通字段,增加一个主键后,逻辑更清楚,所以我建议再增加一个主键字段。

    三、三个实体间均存在多对多的关系
    三个实体存在多对多关系有以下三种情况:

    1.有一个实体与剩下两个实体存在N:M关系,剩下两个实体没有N:M关系。

                                                   图1
    

    2.三个实体间均存在多对多关系。以下这两种情况搞不清楚有什么区别,实际应用时哪种方式更好一点?个人感觉由于图2生成的中间表包含所有的关系,一张表可以连接三个表,查询会更快捷,所以采用了图2。哪位大佬若是了解透彻,还请不吝赐教,指点一二奋斗奋斗

                            图2
    

    参考链接:http://www.cnblogs.com/huangfr/archive/2011/10/10/2206706.html

    更多相关内容
  • Mysql多对关系利用中间表查询

    万次阅读 多人点赞 2019-05-25 17:24:17
    1、多对关系,我们举个简单的例子,一个顾客可以买多件商品,同时一类商品(指多件相同的商品)也可以也可以让多个用户购买 下面是对应的,用户,商品以及关系表,其中关系表中userId、metId的外键分别是...

    1、多对多关系,我们举个简单的例子,一个顾客可以买多件商品,同时一类商品(指多件相同的商品)也可以也可以让多个用户购买

    下面是对应的表,用户表,商品表以及关系表,其中关系表中userId、metId的外键分别是userTable 的userId 、materialTable 的matId

            userTable                                                      materialTable                                       

     

                                   

       materil_user 

     

    如果我们要查询用户a1买了哪些商品我们可以这样

    SELECT user.userName,user.userId,mat.matName,mat.matId FROM materil_user mu LEFT JOIN userTable user on 
    user.userId=mu.userId LEFT JOIN materialTable mat on mat.matId=mu.matId WHERE mu.userId=1

     查询结果:

    展开全文
  • 中间表-多对关系的转化: 在表的使用中,经常存在多对多的关系,以订单和商品为例,一个订单对应多个商品,一个商品也对应多个订单,此时把E-R图(E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示...

    中间表-多对多关系的转化:

    在表的使用中,经常存在多对多的关系,以订单和商品为例,一个订单对应多个商品,一个商品也对应多个订单,此时把E-R图(E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型)转化为关系模型时,需要引入中间表。

    中间表包含两个实体类的主键,建立两张表沟通。

    中间表也可以有普通字段,例如商品数量,每种商品总和(需要把他们与实体表中字段含义区分开)。

    中间表主键:

    中间表的主键可以是两个外键作为联合主键( 联合主键就是说,当一个字段可能存在重复值,无法确定这条数据的唯一性时,再加上一个字,两个字段联合起来确定这条数据的唯一性。比如你提到的id和name为联合主键,在插入数据时,当id相同,name不同,或者id不同,name相同时数据是允许被插入的,但是当id和name都相同时,数据是不允许被插入的),也可以是再增加一个主键字段。

    三个实体间存在多对多的关系:

    有一个实体与剩下两个实体存在N:M关系,剩下两个实体没有
    在这里插入图片描述
    三个实体间存在多对多关系
    在这里插入图片描述
    在这里插入图片描述

    中间表简述:

    中间表是业务逻辑中的概念,就是将计算结果先保存在一个临时的表中,然后再从这个表中计算,减少程序的复杂度。临时表是中间表多采用的一种技术,使用 Oracle临时表功能可以免去中间表数据的维护工作。

    中间表举例:

    分析表1(tableOne),找到唯一的业务主键,这是一个班级课程表,存储了课程的信息,主键就id。
    在这里插入图片描述
    分析表2(tableTwo)找到唯一的业务主键,这是一个课程单元表,存储了所有课程单元。
    在这里插入图片描述
    因为课程表和单元表没有关联信息,所以无法关联查询,这时需要中间表把两个表进行关联。
    在这里插入图片描述
    建立索引。
    在这里插入图片描述
    查询测试。
    在这里插入图片描述
    检验测试查询结果。
    在这里插入图片描述

    展开全文
  • 聚簇索引:MySQLInnoDB一定会建立聚簇索引,把实际数据行和相关的键值保存在一块,这也决定了一个只能有一个聚簇索引,即MySQL不会一次把数据行保存在二个地方。1)InnoDB通常根据主键值(primarykey)进行聚簇2)如果...

    b45c20fe2275e95d9bf760627f2b6c65.png

    慕的地10843

    补充一点,希望有些帮助。聚簇索引:MySQLInnoDB一定会建立聚簇索引,把实际数据行和相关的键值保存在一块,这也决定了一个表只能有一个聚簇索引,即MySQL不会一次把数据行保存在二个地方。1)InnoDB通常根据主键值(primarykey)进行聚簇2)如果没有创建主键,则会用一个唯一且不为空的索引列做为主键,成为此表的聚簇索引3)上面二个条件都不满足,InnoDB会自己创建一个虚拟的聚集索引优点:聚簇索引的优点,就是提高数据访问性能。聚簇索引把索引和数据都保存到同一棵B+树数据结构中,并且同时将索引列与相关数据行保存在一起。这意味着,当你访问同一数据页不同行记录时,已经把页加载到了Buffer中,再次访问的时候,会在内存中完成访问,不必访问磁盘。不同于MyISAM引擎,它将索引和数据没有放在一块,放在不同的物理文件中,索引文件是缓存在key_buffer中,索引对应的是磁盘位置,不得不通过磁盘位置访问磁盘数据。缺点:1)维护索引很昂贵,特别是插入新行或者主键被更新导至要分页(pagesplit)的时候。建议在大量插入新行后,选在负载较低的时间段,通过OPTIMIZETABLE优化表,因为必须被移动的行数据可能造成碎片。使用独享表空间可以弱化碎片2)表因为使用UUId作为主键,使数据存储稀疏,这就会出现聚簇索引有可能有比全表扫面更慢,所以建议使用int的auto_increment作为主键3)如果主键比较大的话,那辅助索引将会变的更大,因为辅助索引的叶子存储的是主键值;过长的主键值,会导致非叶子节点占用占用更多的物理空间引自:http://blog.csdn.net/wyzxg/article/details/8779235

    展开全文
  • 数据库两张表多对关系为什么用中间表而不用相互外建,菜鸟求指点
  • 一般情况下,多对多的关联关系是需要中间表的; 情况一:如果中间表仅仅是做关联用的,它里面仅有2个外键做联合主键,则使用ManyToMany(不用写中间表的Model,只需要写出两张主表的model即可) 学生表 @...
  • 前两种关系只需要表本身就能表达清楚,然而多对多需要第三张中间表才能表达清楚多对多的关系中间表在一般情况下是由三个字段组成: 1、中间表本身的自增主键 2、两张表各自的主键。 这时候命名就成为了一个...
  • 多对关系中间表命名

    千次阅读 2019-09-24 11:00:09
    在网上看一些,以及我个人使用的方法,总结一个规则:table1_table2 转载于:https://www.cnblogs.com/Jerrycjc/p/7146971.html
  • 27.一对一,一对多,多对关系表的各种骚操作

    万次阅读 多人点赞 2021-08-31 10:22:33
    (1)一对多表关系的数据的添加修改 ①学院信息的插入: 常规方法是写个视图函数,在视图函数里添加插入数据的逻辑代码。但是这样的话——你得访问此视图函数对应的接口才能添加成功!岂不麻烦~ 所以,本博主...
  • 但是在建立多对关系的映射时,我们要借助一张中间表,并在中间表里添加外键,所以两张表的建表语句就是正常的建表语句,只需要添加每个表本身的字段即可,不需要添加额外属性。 随便举个例子吧,route表(线路)...
  • 多对关系 - 三种中间表的创建方式 - 优劣总结 方式一、手动创建第三张表 方式二、自动创建第三张表 - MandyToManyField 方式三、半自动创建第三张表 -- 手动创建第三张表+ManyToMany建立关系(推荐使用) ...
  • jpa配置多对关系(中间表)

    万次阅读 2018-04-03 10:24:54
    现在我们再tb_user或者tb_role中任意一个里面进行维护关系多对对的情况下我们需要创建一个中间表来完成这个关系的映射,我们再tb_user中添加注解@ManyToMany然后再添加一个注解@JoinTable因为我们是要创建中间表...
  • 一、中间表-多对关系的转化实际中,经常存在多对关系。以订单和商品为例,一个订单对应多个商品,一个商品也对应多个订单。此时在将E-R图转化为关系模型时,需要引入中间表(也叫做连接表)。中间表包含两个实体...
  • 里面放丈夫和妻子2、一对多可以建两张表,将一这一方的主键作为多那一方的外键,例如一个学生表可以加一个字段指向班级(班级与学生一对多的关系)3、多对多可以多加一张中间表,将另外两个表的主键放到这个表中(如...
  • Springboot-表关联的建立(中间表

    千次阅读 2018-07-12 16:49:28
    场景:用户表、项目表、用户和项目中间表   多对多表的实体创建,记得在配置文件中加: spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect MyISAM和InnoDB详解:...
  • 因为中间表带有属性,采用的多对多映射方式 两个实体类都使用 @OneToMany( mappedBy="workDateTime")   需求:因为中间表使用两个外键作为联合主键 ,如果需要对中间表的属性进行修改, 1、一般做法 ...
  • ![图片说明](https://img-ask.csdn.net/upload/201512/04/1449199839_652888.png)
  • 数据库关系无非就四种:1、一对多(多对一),2、一对一,3、多对多,4、没有关系。其实面对数据多对关系并没有那么复杂,那要看你怎么实现,传统的方法无非就是查询sql语句,而我要的是不通过自己写sql...
  • 一Ø 一一是将数据“垂直切分”,其实是不常见,或不常用的。也就是 A 的一条记录对应 B 的一条记录,为什么要这样的设计呢,不是增加了程度的复杂性吗,然而并不一定,举例说明: 1) 一个系统...
  • mybatis通过中间表实现一对多查询

    千次阅读 2020-05-09 22:36:22
    1.student:学生 2.subject:科目 3.stu_sub:学生-科目(这里的成绩字段没用到,不用管) 实体类( get、set方法省略): 1.student public class Student implements Serializable { private int id; ...
  • 26.Django实现表关系(一对多,一对一,多对多))

    千次阅读 多人点赞 2021-08-30 17:06:26
    表关系的实现: 实践: (1)模型的定义(models.py文件): class Department(models.Model): """ 学院 """ d_id = models.AutoField(primary_key=True) d_name = models.CharField(max_length=30) def ...
  • laravel删除多对中间表关联关系

    千次阅读 2018-03-22 16:32:49
    detach方法将会从中间表中移除相应的记录
  • Hibernate 学习心得之一 多对关系中,中间表无法插入数据。最近学习 spring4+hibernate4,学习中遇到了很多坑。在这里我来说说我遇到的坑,这里就不介绍如何spring如何集成hibernate。目前学习过程中,我遇到的两...
  • 最近在做项目的权限控制这一块,在编写修改角色权限部分代码时遇到角色-权限中间表数据插入失败的问题,原因是将中间表维护放在了权限表这一端来进行。 角色实体类如下: @Entity @Table(name = "sys_role&...
  • Hibernate多对关系中间表有其他属性的配置方式 一、需求原因  在我做系统架构时遇到情况是这样:资源菜单实体类(Resource)和角色实体类(Role)是多对多关系,需要各个角色可以个性化自己的资源菜单顺序。 二、...
  • 数据库中的表 用户表:在配置实体类的时候放弃...需求:删除t_user表中的user_id 为1的用户,并删除相关的中间表纪录。 代码: @Test public void testRemove() { EntityManager manager = JPAUtil.createEn...
  • MyBatis 多对中间表插入数据

    万次阅读 2017-05-10 18:45:55
    在做这个员工管理系统demo的时候,由于user和role是多对关系,且user主键是自增的,所有我们没办法提前知晓这个user_id,所以插入的时候,就需要先插入user,然后再找到刚插入的id拿出来,再插入中间表user_role,...
  • 单向多对一: 给多方加上@ManyToOne ex:【产品类Product--多方 ,产品分类ProductDir--一方】 单向一对多:给一方加上@OneToMany ex:【产品类Product--多方 ,产品分类ProductDir--一方】 双向多对一、...
  • 数据库怎么设计多对多的数据

    千次阅读 2021-01-19 19:55:55
    数据库怎么设计多对多的数据一、...比如老师和学生,建立一个关系表id,老师id,学生id即可二、数据设计(一对多,多对多)做一个项目,必然是少不了数据库设计的!在学习阶段,基本都是单。然而在实际开发...
  • 在数据库中,如果两个的之间的关系为,多对多的关系,如:“学生和课程”,一个学生的可以选多门课,一门课也可以被多门学习选;根据数据库的设计原则,应当形成第三张关联步骤1:创建三张数据Student ,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 383,036
精华内容 153,214
关键字:

多对多关系中间表