敢问大佬们是如何处理多对多关系的 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
DarkEa
V2EX    Java

敢问大佬们是如何处理多对多关系的

  •  1
     
  •   DarkEa Nov 9, 2020 via Android 4714 views
    This topic created in 1998 days ago, the information mentioned may be changed or developed.
    比如我有两张表,学生表和科目表,通过一张中间表关联。但是中间表除了两个外键外还有其他的字段,比如科目的成绩之类的。那么如何映射 Java 对象稍微好点呢。
    13 replies    2020-11-09 11:37:38 +08:00
    laminux29
        1
    laminux29  
       Nov 9, 2020
    你需要的是成绩表吧?

    表字段结构:
    整数 ID,自增,唯一,非空。
    外键 学生 ID,非空。
    外键 科目 ID,非空。
    浮点 成绩,非空。

    表约束:学生 ID 、科目 ID 为联合唯一约束。

    根据这种表结构,随便 jpa 映射一下就好了。
    DarkEa
        2
    DarkEa  
    OP
       Nov 9, 2020 via Android
    @laminux29 #1 那中间表是要单独映射成对象么。如果我用 Mybatis 是直接映射关联的类(学生类和科目类)好还是直接映射外键 id
    ebingtel
        3
    ebingtel  
       Nov 9, 2020
    觉得所有的 orm 多对多映射都很麻烦……所以一直把关联表映射成对象 -- ; 完全从 sql 的逻辑去搞
    SWALLOWW
        4
    SWALLOWW  
       Nov 9, 2020
    这种啊,我一般设计好数据类型然后 ef codefirst 直接生成数据库
    kiracyan
        5
    kiracyan  
       Nov 9, 2020
    这都不能叫中间表
    securityCoding
        6
    securityCoding  
       Nov 9, 2020
    中间表很单纯的,不要夹杂业务属性
    DarkEa
        7
    DarkEa  
    OP
       Nov 9, 2020 via Android
    @securityCoding #6 但是如果只有比如一个多余字段,但是那个多余字段又是必要的再拆分一个表就有点多余了吧
    securityCoding
        8
    securityCoding  
       Nov 9, 2020
    @DarkEa 不多余 ,不同业务领域的属性不要揉在一起 ,合理的业务领域建模才能控制复杂度
    wysnylc
        9
    wysnylc  
       Nov 9, 2020
    拆成 1 对多,使用 in 二次查询+代码拼接
    不使用 join 避免多表查询,可提高性能和避免跨库事务
    DarkEa
        10
    DarkEa  
    OP
       Nov 9, 2020 via Android
    @securityCoding #8 那我要如何映射这几个表呢。学生对象中直接存放一个课程对象数组和成绩数组么。还是直接把他们拆成一个(学生+成绩)的对象和一个(课程+成绩)的对象
    DarkEa
        11
    DarkEa  
    OP
       Nov 9, 2020 via Android
    @wysnylc #9 用 in 二次查询是指先查出一个学生对应的所有课程 id 和成绩然后再通过 in 查询课程的 id 么
    leesaijyun
        12
    leesaijyun  
       Nov 9, 2020
    用户和角色就是一种多对多的关系,中间表就是用户 ID 、角色 ID, 一个用户可以同时是老师, 超级管理员, 财务什么的
    spbcu
        13
    spbcu  
       Nov 9, 2020
    这就不叫中间表了,这是成绩表,只是关联了另外两个表而已。
    About     Help     Advertise     Blog     API     FAQ     Solana     2644 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 46ms UTC 12:39 PVG 20:39 LAX 05:39 JFK 08:39
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86