3

我正在为我们的电子商务公司开发一个交易库存系统,我正在寻找某种指南或教程,了解如何使用 MySQL 数据库完成此任务。有关于如何编程的指南,以及关于如何使用此类系统的指南,但我一直无法找到具有建议表结构或实施您自己的最佳实践的资源。

在这个系统中,所有的物品都被购买、储存、转售,然后运输(没有制造)。该系统应支持多个“位置”(即威斯康星州、北卡罗来纳州)。每个位置可以有一个或多个“仓库”(彼此相邻的建筑物)。每个仓库可以有一个或多个“Isles”,每个Isle 有一个或多个“货架”,每个货架有一个或多个“箱”。商品存放在箱子中,每种尺寸/颜色的变化都有自己的箱子。有些物品可能存放在多个箱子中(即,如果我们一次订购 2000 件可获得折扣,我们可能会将 10 件存放在低箱子中,而将其余物品放在高架上“积压”。

将项目存储在各自的位置非常简单。我可能会有一个像这样的 Bins 表:

BinID BinName LocationID WarehouseID IsleID ShelfID
-------------------------------------------------- -------------------------------------------
1 小部件箱 A 1 1 1 1
2 小部件箱 B 1 2 2 5
3 大部件架 1 1 5 17
4 小部件积压 2 3 6 23

然后使用 Inventory Transaction Table 在 Bins 之间移动项目,例如:

TransID SourceBinID DestBinID 数量 日期 备注
-------------------------------------------------- -------------------------------------------
   1 4 1 10 7-22-2011 移动了 10 个小部件...

但这是我感到困惑的地方:

假设现在是午夜,客户从网站订购了 2 个小部件。一个垃圾箱中有 5 个小部件。客户已经支付了他的 2 个小部件的费用,所以没有其他人可以购买它们,但是现在是午夜,没有人在工作,所以他的小部件仍然放在垃圾箱里。我需要某种交易来减少“可销售”小部件的数量,而不会减少实际货架上的数量。

第二天,一名员工挑选这些小部件并将它们移动到包装区。现在需要进行实物交易,以注意这些物品现在在包装线上,不再在它们的箱中。但是包装需要一个特殊的位置,因为它和普通的“Bin”不一样,对吧?所以不知何故,我们需要将东西从一个 bin 移动到一个特殊的非 bin 位置,并且我们需要一个事务条目来执行此操作。

然后还有其他“特殊”地方,例如退货隔离区,以及在该订单的其他物品缺货时放置物品的地方。

如果您知道一本书或在线资源可以从编程/数据库的角度解释如何做到这一点,那就太好了。或者如果有人已经知道如何做到这一点并且愿意分享,那也很棒!

谢谢!

更新:

我已经对此进行了更多思考,并且可以动态计算“可销售”库存(我认为它被称为“现有”)。“所有箱子的总数”-“未完成的订单”=“在手”。问题是,这会不会太慢而不实用?它需要执行几个查询,然后遍历结果以获得现有总数。

另一种方法可能是为“现有”提供一个单独的事务表,但是您有两个库存日记帐——“现有”和“物理”。即使它们应该始终保持同步(如果不是它是一个错误!)它仍然感觉不对吗?

我仍然不确定如何处理物理位置。当您运送它时,它已经从库存中消失了,但是对于复式记账式会计,它需要去某个地方。所以我需要某种“消失”的垃圾箱。但是把“gone”和“packing table”做成“bins”也不对,因为它们实际上并不是bins。

更新 3

动作:

MoveID TransID SourceBinID DestBinID 备注
-------------------------------------------------- -------------------------------------------
   1 1 4 1 将 10 个小部件移动到 bin 1
   2 2 1 4 从 bin 4 收到 10 个小部件

问题:

IssueID TransID SourceBinID 备注
-------------------------------------------------- -------------------------------------------
   1 3 4 将小部件运送给客户
   2 4 1 将小部件运送给客户

交易:

TransID ItemID 日期 数量 类型  
-------------------------------------------------- -------------------------------------------
   1 1 7-22-2011 10 移动     
   2 1 7-22-2011 -10 移动
   3 1 2011 年 7 月 23 日 1 期
   4 1 2011 年 7 月 24 日 2 期

更新 4

好的,我要再试一次,暂时不分配。

位置表 - “位置”是一个东西可以物理“存在”的地方。

       
LocationID LocationTypeID LocationName
-------------------------------------------------- ------------   
1 1 一个小工具箱    
2 1 一个小工具箱
3 1 一个小工具箱
4 1 一个小工具箱
5 5 供应商(无处)
6 3 包装表1
7 4 Gone(运送给客户)

一个位置有一个“类型”。一个位置可以是一个箱子、一个积压的位置、一个包装表,或者代表一个客户(对于出库)或供应商(对于入库)。

位置类型

   
LocationTypeID LocationTypeName
-------------------------------------------------- ------------
1 拣货箱
2 积压箱
3 包装/运输表
4 已发货物品
5 供应商(用于复兴)

实物交易 - 当事物移动时。

               
TransID LocationID 借记贷记凭证
-------------------------------------------------- ------------               
1 5 10 初始购买 10 个红色小部件
2 1 10 初始购买 10 个红色小工具
3 1 2 选择 2 个小部件和....
4 3 2 将它们移到包装台上
5 3 2 向客户发送小部件
6 4 2 客户获取小部件
4

1 回答 1

1

最常用的术语是“已分配”。您手头有 5 个小部件,并且已分配 2 个。剩下 3 个“可用”。当这些项目被选中时,您需要取消该分配。

当您从库存中移除物品时(我称之为“发行”),您需要提供某种“成本帐户”,以便您确定该价值的去向。

我的另一条建议是使用两个交易进行库存移动。删除一个位置的数量并将其添加到另一个位置。通过这样做,您可以将影响现有数量的所有事务保存在一个表中,并且可以很容易地动态确定现有数量。

我所做的看起来像这样:

库存交易

这使我可以在单独的表中保留有关特定类型事务的更详细信息,并在主事务表中保留常见内容。

于 2011-04-01T02:34:35.337 回答