询问遥远的关系

时间:2015-01-14 19:44:06

标签: sql ruby postgresql sequel

我正在为应用中的某些关系数据建模。我主要想知道如何处理SQL中的远程关系,但对于上下文而言,它是一个Ruby应用程序,我使用Sequel作为ORM。

一个示例关系如下所示:

alphas one-to-many bravos
bravos many-to-one charlies
charlies one-to-many deltas
deltas one-to-many echoes

所以,使用ORM并在Ruby中完成工作我可能会天真地查询与Alpha相关的所有回声,如下所示:

a = Alpha.where id: 1
echoes = []
a.bravos.each do |bravo|
  bravo.charlie.deltas.each do |delta|
    echoes << delta.echoes
  end
end
echoes.flatten

这可行,但无法利用数据库,而是完成应用程序层中的大部分工作。在丑陋的psuedo-sql子查询中表达相同的想法,它看起来像:

SELECT * FROM echoes WHERE delta_id IN
  SELECT delta_id FROM charlies WHERE charlie_id IN
    SELECT charlie_id FROM bravos WHERE bravo_id IN
      SELECT id FROM bravos WHERE alpha_id = 1

这基本上是相同的蛮力方法,似乎必须有更好的方法。

所以我的问题是:

  1. 为这样的远程关系编写查询的更好方法是什么?

  2. 是否应该对架构设计进行更改以表示这种远距离关系?

  3. 我发现我可以在alpha_id上创建一个echoes列并使用它来直接查询,然后我会依赖应用程序在中间关系发生变化时始终更新该列。在我看来,这似乎是个坏主意,但在这种情况下肯定会提高查​​询效率。

    我很想听听一些SQL专家的意见,当你有经常查询的远距离相关数据时,你会怎么做?

0 个答案:

没有答案