【问题标题】:Correct way of doing this query on table relationships?对表关系进行此查询的正确方法?
【发布时间】:2011-12-09 18:58:33
【问题描述】:

表_A

  • TA_ID
  • TA_Column
  • TA_Column
  • [...]

表_B

  • TB_ID
  • TB_TableA_ID
  • TA_Column
  • [...]

表_C

  • TC_ID
  • TC_TableA_ID
  • TC_TableB_ID
  • TA_Column
  • [...]

SELECT * FROM Table_C WHERE TC_TableA_ID=1

(是的,我知道 "SELECT *" 不好;只是在这个例子中使用它。)

=================

表_A

  • TA_ID
  • TA_Column
  • [...]

表_B

  • TB_ID
  • TB_TableA_ID
  • TA_Column
  • [...]

表_C

  • TC_ID
  • TC_TableB_ID
  • TA_Column
  • [...]

SELECT * FROM Table_C c LEFT JOIN Table_B b ON c.TC_TableB_ID=b.TB_ID WHERE TB_TableA_ID=1

我在整个项目/代码中都使用了这两种方法,但并没有真正坚持使用一种;哪一种是最有效的模式/查询形式?

【问题讨论】:

    标签: mysql schema


    【解决方案1】:

    标记我为您的第二个选项:加入。表 C 应引用与其直接相关的列。例如,如果:

    • 表 C 是员工
    • 表 B 是部门
    • 表 A 是 LOCATION

    当部门的位置发生变化时会发生什么?您更新 Department 表以​​引用新的 Location 记录。但是,您是否必须遍历所有员工记录并同时更新它们?如果使用两条不同的路径会得到两个不同的结果,那么很容易引入完整性问题。 (员工位于何处?路径 1:直接前往地点,路径 2:前往部门,然后前往地点)。这是一个真正的痛苦。

    如果索引正确,性能应该不是问题。

    【讨论】:

      猜你喜欢
      • 2019-07-24
      • 1970-01-01
      • 2019-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-26
      • 2013-02-20
      • 1970-01-01
      相关资源
      最近更新 更多