我正在努力寻找一种有效的方法来存储每月重复的数据,而这些数据不会经常更改。
class Fund < ApplicationRecord
has_many :factsheets
end
class Factsheet < ApplicationRecord
belongs_to :fund
endA基金每月将有一个新的概况介绍。
每个概况介绍都有一个目标(假设很长的文本)。
目标可能是每月改变,但不经常改变(比方说,每10个月变化一次)。
有什么好办法来保存目标吗?
选项1:
把目标放在模型概况中,就会有很多重复。
(将12个目标存储12个月,但大多数目标可能完全相同)
备选方案2:
建立目标模型,然后建立has_many :objectives基金
class Objective < ApplicationRecord
belongs_to :fund
end目标将有一栏:effective_on,以表明:从哪个月起,基金应在其概况介绍中使用这一客观记录。
(存储2个目标12个月,如果只更改一次)
选项3:
更好的主意?
发布于 2016-04-05 12:13:55
在你的情况下,我会做最简单的选择,这是第一个。
现在为什么?我的动机是规模。在我看来,备选方案2是过度工程的常见情况。您将在100年中的一个表上大约有1200个记录,并且为了这样的论点,假设目标永远不会改变:您将在DB中得到1200个重复的条目。
这是件大事吗?我不这么认为。就这个规模而言,我认为有点重复是完全可以容忍的。
如果您每秒钟创建一个条目,我们可以为一个更好的解决方案而争论,但我建议您使用最简单的解决方案,集中精力解决一个确实需要一些精心设计的解决方案的问题:)。
发布于 2016-04-06 04:21:16
我会选择选择2..。因为正如你解释的那样,这就是现实世界中的真正关系。“基金has_many :objectives”的措辞要求目标成为模型。这样做也适应了未来的灵活性.也许目标可以属于其他模式?
如果您使用选项2,那么您可以做一些类似Fund.last.objectives的事情,并看到最后一个基金的所有目标,而第一个解决方案不容易允许这样的灵活性.你得去做Fund.where('created_at > ?', Time.now.beginning_of_year).pluck(:objective) ..。第二种选择要干净得多,当然不是“超越工程”的任何东西。
https://stackoverflow.com/questions/36425524
复制相似问题