【发布时间】:2017-05-12 03:51:12
【问题描述】:
我有两个表/模型:
- 原因
- 效果
两者都有创建时的时间戳。
我想显示:“从原因到结果的平均时间”
要手动执行此操作,我会查看最近的 10-20 个影响记录,然后为每个结果查找比给定影响更旧的最新原因记录。然后我会平均每个的时间差。
以编程方式计算的最优雅的方法是什么?
我担心随着数据集的增长,如果我不以聪明的方式进行设置,计算起来可能会变得非常昂贵。
如果相关,我使用的是 Ruby 2.x + Rails 4.2 + MySQL/SqLite3,但可接受的答案可以是通用/伪代码。换句话说,我不需要你为我编写查询。请帮我找出最聪明的设计模式。
更新
我正在研究一种受 cmets 和第一个答案启发的方法...
我在 Effect 表中添加了一个 last_cause 列,其中包含最新 Cause 的 ID。
【问题讨论】:
-
为什么因果不相关(例如,一个案例有很多影响)?这将使逻辑更容易,只需拉出一个原因,然后确定其影响的持续时间。例如蝴蝶翅膀可能是原因,结果可能是海啸,但我怀疑结果会是核爆炸。现在,根据您的问题,因果关系的不同可能彼此无关。如果一个结果需要几个月的时间才能从一个原因中发生怎么办?现在你将这种影响归因于最新的原因而不是适当的原因
-
@engineersmnky 我在问题中描述的模型被简化了。真实模型之间的关系更加模糊。我可能可以照你说的做,并将它们直接与另一个相关联......但在现实生活中,哪一个实际上与另一个相关并不那么清楚。我的真实例子更像这样:模型 1 = 啤酒。模型 2 = 排尿。喝啤酒肯定与排尿有关。但是对于啤酒模型来说,有一个小便感觉很尴尬。不过,我想显示从喝啤酒到小便的时间。这有帮助吗?
-
如果您害怕数据集增长,也许您应该在数据库中进行计算。专为此设计的现代数据库。
-
@sig 你能澄清你的意思吗?我不害怕数据增长。我正在寻找一种有效的计算方法。
-
我的意思是你应该在数据库端使用 sql 进行所有计算
标签: mysql ruby-on-rails ruby database-design query-optimization