2015-10-06 95 views
0

我正在写一个处理产品库存的rails应用程序。我想包含以下功能,并正在与开发的高效算法挣扎:随着时间的推移跟踪价值变化的算法

  • 查看股票的历史(有多少人在股票上的每个日期)从仓库
  • 数量删除,并添加到仓库数量在特定的时间段
  • 的时间该产品一度脱销在任何特定时期

我的问题如下:

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

  2. 我应跟踪哪些号码?历史库存数量(即当天股票的 股票中的50股,当天的股票中的24股股票)或库存量 数量(即-5(已售出5)或15(存货添加15))的变化?或者我是否在单独的表格中跟踪两个?

感谢您的帮助。

回答

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和跟踪产品活动的在那里每天的基础。有了这些信息以及时间维度,您可以进行计算,例如“产品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]的库存量。

希望有所帮助。正如我所说我不是产品库存的人,但我已经与销售点系统合作,上面的程序应该能够为您正在尝试做的事情提供足够的启动。

+0

即使没有变化,每天记录数量是否有效率低下?例如,如果我有3000种产品,并且每天都在追踪数量,那么每年的数据库记录就超过100万次......这不是很多吗? –

+0

当然,这是很多数据......但是你想保留还是不保存?这就是问题所在。每日快照将是收集您的广告资源的最标准化方式。理论上,如果数据没有变化,并且在执行计算时考虑到这些数据,则不会保存数据,但我认为这不是正确的方法。这就像谷歌说的:“我们没有为您的网站保存今日的网页访问者,因为您没有收到任何信息”。再次,我没有库存管理或分析方面的培训,但是如果您需要历史数据,这可能是最佳选择。 – rii

+0

好的,谢谢你。从数据库的角度来看,一个小应用程序正常有几百万条记录?我应该担心性能问题(在heroku上运行)?我对大型数据库的经验很少......(但是,对于我所知的所有人来说,这可能不算大)。感谢您迄今为止的所有建议,它非常有帮助。 –

1

这种宝石可能是有用的跟踪模型​​3210

1

变化保持数据原。我会每天亲自创建一个新的数据录入,显示每天有多少物品。或者,您可以缩短间隔,例如每12小时。

对于我们的具体使用情况:

我们有一个表叫天,有许多与产品的许多关系,以及各“关系”将有一个名为量值(跟踪产品的数量每天)。此外,根据关系,我们为与交易(一对多关系)之间的关系提供了另一个价值,该交易具有交易时间和剩余股票的条目。

我会亲自建议您使用库存数量作为原始数据,因为它可以帮助您收集数据,例如某项交易中物品被移除了多少,物品缺货时以及何时它全部通过数据库存。当你有需要进行统计计算的数据时,最好将这些数据存储为原始数据(物品的数量)。

+0

感谢您的回复。如果我存储每天的原始数量,是否有一种简单的方法可以计算一段时间内出售的数量?并且数量补充?例如,如果有一个数组[10,8,6,15,14],这将是总共5个销售和9个补货,但有一个简单的方法来计算? –

+0

不完全确定是否有“简单”的rails方式(我一直使用asp.net MVC),但概念应该是一样的。价值从一个到另一个的任何“增加”都是“重新补货”,任何“减少”都会被出售。通过读取返回“{10,8,6,15,14}”的值表,我会有两个变量'sold'和'restocked'。一次减去两个值。 10 - 8 = 2,这意味着在此次交易中出售2件。 8 - 6 = 2,4,共售出4个。 6 - 15 = -9,9补充和4卖。 15 - 14 = 1,5个出售,9个进货。应该是一个非常简单的O(n)解决方案。 – JTY

+0

当您将数据作为数量存储时,统计最符合IMO的要求。这样,每当遇到任何其他问题时,总会有办法轻松处理您的数据以获取所需的值。 – JTY

相关问题