我正在寻找有关使用Active Record(Rails)管理时态数据的想法/信息。一个例子是emplyoment历史(1月100%工作,但从2月到现在只有80%)。使用传统的“has-many:eployment_parts”可以很容易地解决这个问题。但是还有另一种情况,用户可以计划类似todo列表的东西,用户可以随时间更改(此todo从1月到3月有效,另一个有效期从1月到4月,然后从5月到8月更改细节)。
我知道,对于这些要求没有灵丹妙药解决方案,但我想在这里收集一些关于这个主题的想法/文件/插件。看起来在这个领域还没有做过很多关于铁轨的事情,至少没有任何公开的事情。
如果您有想法,链接或想法,请回答简短的回答!
到目前为止链接:
答案 0 :(得分:3)
我们需要保留数据库记录所有更改的历史数据,并能够及时查询数据,而不会影响查询当前数据的性能。
我们设想的解决方案是一个慢慢变化的维度类型2,带有历史表。该实现是一个Ruby gem,需要PostgreSQL 9.3并且非常适合Active Record,并使用时间框架(例如Foo.as_of(1.year.ago).bars
)扩展它。
您可以在此处找到代码:https://github.com/ifad/chronomodel: - )
答案 1 :(得分:1)
您需要详细说明您想要做的事情。
例如,您需要什么“分辨率”?你打算记录每一天的每个工作小时吗?或者只是平均工作量?每周,也许?
另外,你想对假期和病假做些什么?
(编辑 - 回答下面的评论)
在你的情况下,我会选择与此类似的模型:
class WorkSlice < ActiveRecord::Base
belongs_to :employee
validates_presence_of employee_id, start_date, end_date, percentage
def calculate_hours
#employees might have different hours per day (i.e. UK has 7, Spain has 8)
employee.hours_per_day * self.calculate_days
end
def calculate_days
#days between start_day and end_day that are not sick days, holidays or weekends
workdays = ... #this depends on how you model holidays, etc
return workdays * self.percentage
end
end
据我所知,您需要的唯一协会是“员工”。例如,员工的方法可以让您查看该员工在给定日期的“免费”状态。
答案 2 :(得分:0)
“我知道,对于这些要求,没有银弹解决方案,”
这确实取决于你需要子弹的银色。
总之。您可能会发现以下内容也很有趣:
(a)Hugh Darwen和C.J.Date的“TSQL2概述和分析”。链接位于www.thethirdmanifesto.com的底部“论文”部分。 (b)“时间数据和关系模型”,这是同一作者和Nikos Lorentzos的完整书籍。包含一个不同的,完整的提案以及非常合理的理由,为什么他们认为该提案更好。 (c)你可以找到一个名为SIRA_PRISE的实现,由我编写,基于(b)的想法,关于shark.armchair.mb.ca/~erwin