【问题标题】:An efficient way to store monthly recurring data that does not change frequently?存储不经常更改的每月重复数据的有效方法?
【发布时间】:2016-07-25 08:16:20
【问题描述】:

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

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

Objective 将有一个列:effective_on 来表明:基金应该从哪个月开始在其 Factsheet 上使用此 Objective 记录。
(如果只更改一次,则将 2 个目标存储 12 个月)

选项 3:

更好的主意?

【问题讨论】:

    标签: sql ruby-on-rails activerecord recurring-events


    【解决方案1】:

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

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

    这很重要吗?我想不是。对于这个规模,我相信有点重复是完全可以容忍的。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-17
        • 1970-01-01
        相关资源
        最近更新 更多