2015-10-06 97 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

相關問題