2011-03-31 91 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