我有三个表: users , accounts和hotels. 用户和帐户与belongstoMany关系相关联,而Accounts和Hotels以相同的方式连接。 每个用户都有帐户,这些帐户有酒店。 当我有Auth::user(),如何归还所有酒店? $accounts = Aut ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我正在为应用程序中的一些关系数据建模。 我主要想知道如何处理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相关的所有Echoes,如下所示:
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
这本质上是相同的蛮力方法,似乎必须有更好的方法。
所以我的问题是:
像这样的遥远关系写查询的更好方法是什么?
对表示这种遥远关系的模式设计是否进行了更改?
在我看来,我可以在echoes
上创建一个alpha_id
列,并使用它直接查询,然后,如果中间关系发生变化,我将依靠应用程序始终更新该列。 在我看来,这是一个坏主意,但是在这种情况下,它肯定会使查询效率更高。
我很想听听一些SQL专家的意见,当您需要经常查询的遥远相关数据时,您会怎么做?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.