用于跟踪随时间变化的值的算法

时间:2015-10-06 16:30:43

标签: ruby-on-rails database algorithm

我正在编写一个处理产品库存的rails应用程序。我想包括以下功能,并且正在努力开发一种有效的算法:

  • 查看库存历史记录(每个日期有多少库存)
  • 从仓库中删除的数量,以及在特定时间段内添加到仓库的数量
  • 产品在任何特定时期缺货的时间

我的问题如下:

  1. 跟踪更改的最佳方式是什么?除了我的产品 表,我应该创建另一个名为的表 HistoricProductQuantities,每次都插入一条新记录 是数量的变化吗?

  2. 我应该追踪什么号码?历史库存量(即50英寸)     当天库存,当天24库存),或库存变化     数量即-5(已售出5件)或15件(库存增加15件)?或者我     在两个单独的表中跟踪?

  3. 感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

首先,我建议在您的应用程序上实现日期维度,因为您似乎会进行大量与时间相关的计算。在Google上搜索日期维度,因为它超出了您的问题范围。也就是说,我相信您的应用程序实现和使用日期维度将是非常有益的。

就你的直接问题而言:

What is the best way of tracking changes? In addition to my Products table, should I create another table called HistoricProductQuantities, and insert a new record each time there is a change in the quantity?

是的,您可以这样做,我可能会将其称为HistoricProductSnapshot,并在每天跟踪产品活动。有了这些信息以及时间维度,您可以进行计算,例如“我们有5天或一个月前有多少产品X等等。”

What number should I track? The historic stock quantity (i.e. 50 in stock on this day, 24 in stock on that day), or the CHANGE in stock quantity i.e. -5 (5 sold) or 15 (15 added to inventory)? Or do I track both in separate tables?

我没有编写库存控制软件的经验,但我相信我在上面的问题中提到的快照表,你只需要跟踪每天的数量。然后可以从快照表中计算产品计数的变化。例如,您可以使用一个函数将输出给定时间范围内的产品数量作为数组。示例:从3月1日到3月7日,这些是产品Y [45,40,39,27,22,45,44]的库存量。

希望有所帮助。正如我所说,我不是一个产品库存人员,但我已经与销售点系统合作,上面的程序应该给你一个足够的开始你想要做什么。

答案 1 :(得分:1)

此gem可用于跟踪模型https://github.com/collectiveidea/audited

中的更改

答案 2 :(得分:1)

保持数据原始。我会亲自每天创建一个新的数据条目,显示您每天有多少商品。或者你可以缩短间隔时间,例如每12小时一次。

对于我们的特定用例:

我们有一个名为Days的表,它与产品有多对多的关系,并且每个"关系"将有一个称为数量的值(以跟踪每天的产品数量)。此外,对于每个关系,我们还有与交易关系的另一个值(一对多关系),其中包含交易时间和剩余股票的条目。

我个人建议您使用库存数量作为原始数据,因为它可以让您收集数据,例如在特定交易期间删除了多少物品,物品何时缺货以及何时缺货所有数据都在库存中。当您拥有需要执行统计计算的数据时,最好将此数据存储为原始值(项目数量)。