我正在为我们的电子商务公司开发交易型库存系统,并且正在寻找某种指南或教程,介绍如何使用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
那么你会有一个单独的“分配”表?当你“挑战”的时候,是当你挑选和移动物品到航运中,或者当你运送它并将其放置在码头上时?我创建了一个上面的单个表格,每个“移动”中有两个交易。这是你想到的吗?谢谢! – Nick 2011-04-03 02:05:05
没有人,我会把它全部放在一个带有交易类型鉴别器字段的表中。我的经验是在自定义制作中,所以我们将材料发布到消耗该材料的作业。在物理上,它由不同的客户在不同的点完成。 – 2011-04-03 02:18:58
请参阅上面的更新3。像那样的东西?它似乎仍然不正确。那么分配是否在移动表中? – Nick 2011-04-04 06:04:09