【问题标题】:database design best practice connecting multiple tables连接多个表的数据库设计最佳实践
【发布时间】:2016-09-07 18:50:14
【问题描述】:

很抱歉,如果这个问题以前被问过很多次,但我不知道如何用谷歌能够理解的方式来表达它。

例如,如果您有 3 个表:

表 A

表 B1

表 B2

所有 3 个表中的数据都以 2 种方式中的一种方式连接:

表 A 和表 B1

表 A 和表 B2

将它们连接到一个表中的最佳做法是什么?为什么?

1个表如:

联表

    |Table A  |Table B1  |Table B2  |
    |tableA_ID|tableB1_ID|null      |
    |tableA_ID|null      |tableB2_ID|

或者每个连接有 2 个单独的表

表 A 和 B1 已连接

表 A 和 B2 已连接

或者还有其他更好的方法吗?

【问题讨论】:

  • 谢谢沃尔特,昨天玩了一些之后,我得出了同样的结论,这有助于澄清我的想法。我怎样才能接受这个作为答案...?
  • 它已经被接受为在其原始上下文中的正确答案。我决定不在这里发布多余的答案。

标签: mysql sql database database-design


【解决方案1】:

连接表取决于表之间的字段和关系。 它还取决于您正在查看的输出 - 基于此,您需要加入表格

【讨论】:

    【解决方案2】:

    我想你想要一个left join,实际上是两个:

    select a.tableA_ID, b1.tableB1_ID, b2.tableB2_ID
    from a left join
         b1
         on a.tableA_ID = b1.tableA_ID left join
         b2
         on a.tableA_ID = b2.tableA_ID ;
    

    【讨论】:

      【解决方案3】:

      有点不清楚您要做什么,但鉴于您的预期结果,union all 可能会起作用:

      select a.tableA_ID, 
             b.tableB1_ID as TableB1, 
             null as TableB2
      from a join b on a.tableA_ID = b.tableA_ID
      union all
      select a.tableA_ID, 
             null,
             b2.tableB2_ID
      from a join b2 on a.tableA_ID = b2.tableA_ID
      

      【讨论】:

        猜你喜欢
        • 2011-11-23
        • 1970-01-01
        • 1970-01-01
        • 2010-12-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多