我正在为我们的电子商务公司开发一个交易库存系统,我正在寻找一些关于如何使用MySQL数据库完成此操作的指南或教程。有关如何编程的指南,以及如何使用此类系统的指南,但我无法找到具有建议的表结构或实现自己的最佳实践的资源。
在此系统中,所有物品都被购买,存储,转售,然后装运(无制造)。该系统应支持多个“位置”(即威斯康星州,北卡罗来纳州)。每个位置可以有一个或多个“仓库”(彼此相邻的建筑物)。每个仓库可以有一个或多个“岛”,每个岛有一个或多个“货架”,每个货架有一个或多个“箱”。商品存储在箱子中,每个尺寸/颜色变化都有自己的箱子。有些物品可能存放在一个以上的箱子里(即,如果我们一次订购2000就可以获得折扣,我们可能会在低箱中存货10,然后将其余物品放在高架上“积压”。
将物品存放在各自的位置非常简单。我可能会有一个Bins表,如:
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
然后使用库存事务表在Bins之间移动项目,如:
TransID SourceBinID DestBinID QTY Date Memo --------------------------------------------------------------------------------- 1 4 1 10 7-22-2011 Moved 10 Widgets...
但是这里我感到困惑:
假设是午夜,客户从网站订购了2个小部件。垃圾箱里有5个小工具。客户已经支付了他的两个小部件,所以没有其他人可以购买它们,但它是午夜,没有人工作,所以他的小部件仍然坐在垃圾箱里。我需要某种交易来减少“可销售”小部件的数量,而不会减少实际货架上的数量。
第二天,员工挑选这些小部件并将其移至包装区域。现在需要进行物理交易以注意到物品现在在包装线上而不再在其箱子中。但是包装需要是一个特殊的位置,因为它与常规的“Bin”不一样,对吧?所以我们需要将一些东西从一个bin移动到一个特殊的非bin位置,我们需要一个事务条目来做这件事。
然后还有其他“特殊”的地方,例如退货隔离区,以及当该订单的其他商品延期交货时,可以留出物品的地方。
如果您知道可以从编程/数据库角度解释如何执行此操作的书籍或在线资源,那就太棒了。或者,如果有人已经知道如何做到并且愿意分享,那也会很棒!
谢谢!
更新
我一直在考虑这个问题,并且可以动态计算“可销售”库存(我认为它是“手头”)。 “所有垃圾箱总数” - “未完成订单”=“在手”。问题是,这是否太慢而不实用?它需要执行多个查询,然后循环结果以获得现有总数。
替代方案可能是为“现有”设置单独的交易表,但是您有两个库存期刊 - “现有”和“实物”。即使它们应该始终保持同步(如果不是它也是一个错误!)它仍然感觉不对?
我仍然不确定如何处理物理位置。当你发货时,它已从库存中消失,但对于双重进入式会计,它需要去某个地方。所以我需要某种“消失”的垃圾箱。但是,将“消失”和“打包表”“垃圾箱”也感觉不对,因为它们实际上并不是垃圾箱。
更新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
更新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
答案 0 :(得分:1)
最常用的术语是“已分配”。你手头有5个小部件,已经分配了2个小部件。留下3“可用”。当这些项目被选中时,您需要取消该分配。
当您从库存中删除商品时(我称之为“发行”),您需要提供某种“成本帐户”,以便您识别该价值的去向。
我要提出的另一条建议是使用两笔交易进行库存移动。删除一个位置的数量并将其添加到另一个位置。通过这样做,您可以将影响手数的所有交易保存在一个表中,这样就可以轻松确定现有数量。
我的所作所为:
这使我能够在单独的表中保存有关特定事务类型的更多详细信息以及主事务表中的常见内容。