0

我正在尝试找到一种有效的方法来存储不经常更改的每月重复数据。

class Fund < ApplicationRecord
  has_many :factsheets
end

class Factsheet < ApplicationRecord
  belongs_to :fund
end

基金每月将有一份新的情况说明书。
每个 Factsheet 都有一个目标(假设文本很长)。
目标可能每个月都会更改,但不会频繁更改(例如,每约 10 个月更改一次)。

任何存储目标的好方法?

选项1:

将目标放入模型 Factsheet 中,它会重复很多。
(将 12 个目标存储 12 个月,但其中大部分可能完全相同)

选项 2:

以目标为模型,然后为基金has_many :objectives

class Objective < ApplicationRecord
  belongs_to :fund
end

目标将有一栏:effective_on表明:基金应从哪个月开始在其概况介绍中使用此目标记录。
(如果只更改一次,则将 2 个目标存储 12 个月)

选项 3:

更好的主意?

4

2 回答 2

0

在你的情况下,我会选择最简单的选择,这是第一个。

现在为什么?我的动机是规模。在我看来,选项 2 是过度设计的常见情况。在100 年内,一张表上大约有1200 条记录,为了论证目的,我们假设目标永远不会改变:您将在数据库中获得 1200 个重复的条目。

这有什么大不了的吗?我想不是。对于这个规模,我相信一些重复是完全可以容忍的。

如果您要每秒创建一个条目,我们可以争取更好的解决方案,但我建议您使用最简单的解决方案并专注于确实需要一些精心设计的解决方案的问题:)。

于 2016-04-05T12:13:55.827 回答
0

我会选择选项 2... 因为正如您所解释的那样,这是现实世界中的真实关系。“基金has_many :objectives”要求目标成为模型的语言表达。这样做也适应了未来的灵活性……也许目标可以属于其他模型?

如果您使用选项 2,您可以执行类似的操作Fund.last.objectives并查看最后一个基金的所有目标,而第一个解决方案不容易实现这种灵活性……您必须这样做Fund.where('created_at > ?', Time.now.beginning_of_year).pluck(:objective)……。第二个选项是更清洁,而且它肯定不是“过度工程”任何东西。

于 2016-04-06T04:21:16.543 回答