2011-03-31 89 views
3

我正在爲我們的電子商務公司開發交易型庫存系統,並且正在尋找某種指南或教程,介紹如何使用MySQL數據庫完成此操作。有指導如何編程,並指導如何使用這樣的系統,但我一直無法找到具有建議的表結構或實施自己的最佳實踐的資源。高級交易庫存數據庫設計教程或幫助?

在這個系統中,所有的物品都被購買,儲存,轉售,然後發貨(不製造)。該系統應支持多個「位置」(即威斯康星州,北卡羅萊納州)。每個位置可以有一個或多個「倉庫」(建築物彼此相鄰)。每個倉庫可以有一個或多個「島」,每個島有一個或多個「貨架」,每個貨架有一個或多個「箱」。商品儲存在箱子中,每種尺寸/顏色的變化都有自己的箱子。有些物品可能儲存在一個以上的箱子中(即,如果我們每次訂購2000件就可以獲得折扣,那麼我們可能會在一個低箱子中儲存10件貨物,並將其餘貨架放在「庫存積壓」的高架上。

它們的各自位置,用於存放物品是很簡單的,我可能會擁有一個垃圾箱表所示:

 
BinID  BinName   LocationID  WarehouseID IsleID  ShelfID 
--------------------------------------------------------------------------------- 
1   Widget Bin A   1    1   1   1 
2   Widget Bin B   1    2   2   5 
3   Large Widget Rack  1    1   5   17 
4   Widget Overstock  2    3   6   23 

再往前區間之間的項目與庫存交易表所示:

 
TransID SourceBinID  DestBinID  QTY  Date  Memo 
--------------------------------------------------------------------------------- 
    1   4    1   10  7-22-2011 Moved 10 Widgets... 

但這裏的地方我很困惑:

假設它是午夜,並且客戶從網站訂購2個小工具。垃圾箱中有5個小部件。客戶已經爲他的2個小工具支付了費用,所以沒有其他人可以購買它們,但現在是午夜,沒有人工作,所以他的小工具仍然坐在垃圾箱裏。我需要某種交易來減少「可銷售」數量的小部件,而不會減少貨架上的實際數量。

第二天,員工挑選這些小部件並將其移至包裝區域。現在需要進行物理交易,以注意物品現在在包裝線上,不再在包裝箱中。但包裝需要是一個特殊的位置,因爲它與普通的「Bin」不一樣,對吧?因此,我們需要將物品從箱子移動到一個特殊的非箱子位置,並且我們需要一個交易條目來做到這一點。

然後還有其他「特殊」的地方,如返回隔離區,以及當該訂單的其他物品處於缺貨狀態時用於放置物品的地方。

如果你知道一本書或在線資源,可以從編程/數據庫的角度解釋如何做到這一點,那就太好了。或者如果有人已經知道如何做到這一點,並願意分享,那也會很棒!

謝謝!

UPDATE:

我已經給這一些更多的思考,它有可能是「可供出售」存貨(我認爲這就是所謂的「手」​​)可以動態計算。 「所有箱子的總數」 - 「未填充的訂單」=「現有」。問題是,這會變得太慢而不切實際嗎?它需要執行幾個查詢,然後遍歷結果以獲得現有總數。

另一種方法可能是針對「現有」單獨的交易表,但您有兩個庫存日誌 - 「手頭」和「物理」。儘管它們應該始終保持同步(如果不是它是一個錯誤!)它仍然感覺不對?

我還不確定如何處理物理場所。當您發貨時,它已經從庫存中消失,但對於雙重入場風格的會計,它需要去某個地方。所以我需要某種「走出去」的垃圾桶。但是,讓「走出去」和「打包餐桌」的「垃圾箱」也不合適,因爲它們實際上並不是垃圾箱。

UPDATE 3

變動:

 
MoveID  TransID  SourceBinID  DestBinID  Memo 
--------------------------------------------------------------------------------- 
    1   1    4    1   Moved 10 Widgets to bin 1 
    2   2    1    4   Received 10 Widgets from bin 4 

問題:

 
IssueID  TransID  SourceBinID  Memo 
--------------------------------------------------------------------------------- 
    1   3    4    Shipped Widget to Customer 
    2   4    1    Shipped Widget to Customer 

交易:

 
TransID   ItemID   Date   QTY  Type 
--------------------------------------------------------------------------------- 
    1    1    7-22-2011  10  Move  
    2    1    7-22-2011  -10  Move 
    3    1    7-23-2011  1  Issue 
    4    1    7-24-2011  2  Issue 

UPDATE 4

好吧,我要再試一次,沒有現在的分配。

位置表 - 「位置」是一個東西可以在物理上「成爲」的地方。

  
LocationID LocationTypeID   LocationName 
------------------------------------------------------------- 
1     1     A Widget Bin  
2     1     A Widget Bin 
3     1     A Widget Bin 
4     1     A Widget Bin 
5     5     Vendor (nowhere) 
6     3     Packing Table 1 
7     4     Gone (shipped to customer) 

一個位置有一個「類型」。一個位置可以是垃圾箱,積壓庫位,裝箱表,或代表客戶(出站)或供應商(入站)。

位置類型

 
LocationTypeID LocationTypeName 
------------------------------------------------------------- 
1     Picking Bin 
2     Overstock Bin 
3     Packing/Shipping Table 
4     Shipped Items 
5     Vendor (for reviving) 

實物交易 - 當事情走動。

    
TransID LocationID Debit  Credit Memo 
-------------------------------------------------------------    
1   5    10     Initial purchase of 10 Red Widgets 
2   1      10  Initial purchase of 10 Red Widgets 
3   1    2     Pick 2 Widgets AND.... 
4   3      2   Move them to the packing table 
5   3    2     Ship Widgets to Customers 
6   4      2   Customer Gets Widgets 

回答

1

最常用的術語是「分配」。你手上有5個小部件,並且已經分配了2個小部件。這留下了3個「可用」。當這些項目被選中時,您需要取消該分配。

當您從庫存中刪除項目(我稱之爲「發行」)時,您需要提供某種「成本賬戶」,以便確定價值已經消失的地方。

我的另一條建議是使用兩個交易進行庫存移動。在一個位置刪除數量並將其添加到另一個位置。通過這樣做,您可以將影響手頭數量的所有交易保留在單個表格中,並且可以輕鬆確定現有數量。

我做的是這樣的:

Inventory Transactions

這讓我保持對單獨的表中的特定類型的交易,並在交易主體表中常見的東西更詳細的信息。

+0

那麼你會有一個單獨的「分配」表?當你「挑戰」的時候,是當你挑選和移動物品到航運中,或者當你運送它並將其放置在碼頭上時?我創建了一個上面的單個表格,每個「移動」中有兩個交易。這是你想到的嗎?謝謝! – Nick 2011-04-03 02:05:05

+0

沒有人,我會把它全部放在一個帶有交易類型鑑別器字段的表中。我的經驗是在自定義製作中,所以我們將材料發佈到消耗該材料的作業。在物理上,它由不同的客戶在不同的點完成。 – 2011-04-03 02:18:58

+0

請參閱上面的更新3。像那樣的東西?它似乎仍然不正確。那麼分配是否在移動表中? – Nick 2011-04-04 06:04:09