在表关系上执行此查询的正确方法?

时间:2011-12-09 18:58:34

标签: mysql schema

表-A

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

表-B

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

Table_C

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

SELECT * FROM Table_C WHERE TC_TableA_ID = 1

(是的,我知道“SELECT *”很糟糕;只是在这个例子中使用它。)

= = = = = = = OR = = = = = = =

表-A

  • TA_ID
  • TA_Column
  • [...]

表-B

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

Table_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

我一直在使用我的项目/代码,但并没有真正坚持一个;哪一个是最有效的架构/查询形式?

1 个答案:

答案 0 :(得分:0)

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

  • 表C是EMPLOYEE
  • 表B是DEPARTMENT
  • 表A是LOCATION

当部门的位置发生变化时会发生什么?您更新Department表以引用新的Location记录。但是,您是否必须浏览所有员工记录并更新它们?通过使用两个不同的路径,您可以轻松地引入完整性问题,从而获得两个不同的结果。 (员工位于何处?路径1:直接前往位置,路径2:前往部门,然后前往位置)。这真是一种痛苦。

如果索引正确,则性能不应成为问题。

相关问题