高级交易库存数据库设计的教程或帮助?

Posted

技术标签:

【中文标题】高级交易库存数据库设计的教程或帮助?【英文标题】:Tutorial or help with Advanced Transactional Inventory Database Design? 【发布时间】:2011-07-26 14:14:12 【问题描述】:

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

在这个系统中,所有商品都经过购买、存储、转售,然后发货(不生产)。该系统应支持多个“位置”(即威斯康星州、北卡罗来纳州)。每个位置可以有一个或多个“仓库”(彼此相邻的建筑物)。每个仓库可以有一个或多个“岛”,每个岛有一个或多个“货架”,每个货架有一个或多个“箱”。商品存放在箱子中,每种尺寸/颜色的变化都有自己的箱子。有些物品可能存放在多个箱子中(即,如果我们一次订购 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

然后在带有库存交易表的 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 客户获取小部件

【问题讨论】:

【参考方案1】:

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

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

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

我的做法是这样的:

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

【讨论】:

那么你会有一个单独的“分配”表吗?当你“发布”是当你挑选并将物品移动到运输时,或者当你运送它并将它放在码头上时?我在上面创建了一个表,其中每个“移动”都有两个事务。你是这么想的吗?谢谢! 不,就个人而言,我会将其全部保存在一个带有事务类型鉴别器字段的表中。我的经验是定制制造,因此我们将材料分配给消耗该材料的工作。从物理上讲,它是由不同的客户在不同的时间点完成的。 请参阅上面的更新 3。类似的东西?但这似乎仍然不对。那么分配是否在移动表中?

以上是关于高级交易库存数据库设计的教程或帮助?的主要内容,如果未能解决你的问题,请参考以下文章

数据中台实战:交易分析

设计金融交易系统数据库架构的设计原则?

设计库存需求预测系统

库存数据库设计[关闭]

高级架构程序设计,功能设计,数据库设计,第三方支付,web安全视频教程

区块链数字货币积分交易系统设计开发与搭建