我正在尝试找到一种有效的方法来存储不经常更改的月度重复数据。
class Fund < ApplicationRecord
has_many :factsheets
end
class Factsheet < ApplicationRecord
belongs_to :fund
end
基金会有一个新的资料单每月。
每个资料单都有一个目标(非常长的文本,假设)。
目标可能每个月更改,但不经常(例如,每10个月更改一次)。
存储目标的任何好方法?
选项1:
将目标放入模型Factsheet中,它将重复很多次。
(存储12个目标12个月,但大多数可能完全相同)
选项2:
制作客观的模型,然后资助has_many :objectives
class Objective < ApplicationRecord
belongs_to :fund
end
目标将有一列:effective_on
表示:基金应从哪个月在其资料单上使用此目标记录。
(如果只更改一次,则存储2个目标12个月)
选项3:
更好的主意?
答案 0 :(得分:0)
在你的情况下,我会选择最简单的选项,这是第一个。
现在为什么?我的动机是规模。在我看来,选项2是过度工程的常见情况。在 100年中,您将在一张桌子上大致 1200条记录,让我们假设目标从不更改的论点:您将在DB中获得1200个重复的条目。
这是一个大问题吗?我想不是。对于这种规模,我相信一点点重复是完全可以容忍的。
如果你要每秒创建一个条目,我们可以争论一个更好的解决方案,但我建议你选择最简单的解决方案并专注于一个真正需要一些精心设计的解决方案的问题:)。
答案 1 :(得分:0)
我会选择2 ...因为这是现实世界中的真实关系,就像你解释它一样。 “基金has_many :objectives
”要求将目标作为模型的语言表达。这样做也可以适应未来的灵活性......也许目标可以属于其他模型?
如果您使用选项2,那么您可以执行类似Fund.last.objectives
的操作并查看上一个基金的所有目标,而第一个解决方案不容易实现这样的灵活性......您必须这样做{ {1}} ....第二个选项更清晰,当然不是“过度工程化”任何东西。