6

我卖酒。所以我有瓶子的库存。到目前为止,我有一个引用产品和 line_item 的“InventoryUnit”模型。

  1. 每个瓶子都应该作为一个单独的 InventoryUnit 对象存储在我的数据库中吗?

  2. 减少库存的最佳做法是什么?如果我卖一瓶,我会销毁 InventoryUnit 吗?还是我应该添加一个可以“已售”或“有货”的状态栏?

  3. 我担心性能,Postgres 可以处理数十万个 InventoryUnit 对象吗?

我真的很感激这方面的一些帮助。抱歉,我是前端人员,所以我真的很擅长数据库建模……</p>

4

3 回答 3

7

一。每个瓶子都应该作为一个单独的 InventoryUnit 对象存储在我的数据库中吗?

如果您可以单独出售它们,那么可以,否则按 case/box 跟踪它们。

二。减少库存的最佳做法是什么?如果我卖一瓶,我会销毁 InventoryUnit 吗?还是我应该添加一个可以“已售”或“有货”的状态栏?

使用位置和运动的概念(运动应该是它自己的实体)。例如,OpenERP 使用与此类似的“虚拟位置”。

瓶子碎了?将其从其库存位置移至“损坏”位置
瓶子不见了?将其从库存移动到“以太”位置
找到一个随机瓶子?把它从“以太”移到库存
卖了一瓶?将其从库存移至“已售出”
买了一瓶?将其从已购买移动到库存

三。我担心性能,Postgres 可以处理数十万个 InventoryUnit 对象吗?

Postgres 可以处理数千亿个对象。正确规范化。使用小数据类型。使用索引。

其他一些需要记住的事情:

  • 你可以卖东西,它被退回,你把它放回库存
  • 你可以买东西,但它不正确,所以你把它寄回给卖家
  • 您可以出售您不拥有的东西(寄售,或尚未入库)
  • 您的库存中可能有一些目前不出售的东西。

对于库存核算,您还需要根据离岸交货 FOB 状态计算您负责的入库和出库货物。

如果您制造/组装任何东西,您需要计算原材料(DIY酿酒的东西?)和正在进行的工作,以及订购成本等。

寄售货物不计入会计存货。

于 2013-09-25T18:36:53.423 回答
3

您应该在最低可替代级别跟踪库存。换句话说,当您要从货架上挑选一个单元时,您需要了解哪些最具体的信息才能得到正确的东西。

在您的示例中,我不能只说“去拿瓶”,或者您可以带回葡萄酒而不是伏特加。我也不能说,“去拿一瓶伏特加”,因为当我想要 Ciroc 时,你可能会带回 Absolut。最后,我不能说“去买一瓶 Ciroc”,因为当我想要 1.5L 尺寸时,你可能会带回 1L 尺寸。

我可以说“去拿下 1.5L Ciroc 底壳前排左侧的第三瓶”,但这很愚蠢,因为所有 1.5L 的 Ciroc 瓶都是一样的。(味道放在一边;))。

最佳位置成为您的库存单位 (SKU)。值得庆幸的是,世界上几乎每家公司都已经为您解决了这个问题。只需使用条形码下方的 UPC 编号作为您的 SKU。

基于此,您的模型将类似于...

InventoryOnHand
- id:int
- product_id:int
- quantity:int

Product
- id:int
- sku:string
- name:string

然后,您将随着物品进出库存增加和减少 InventoryOnHand 数量。

于 2013-09-25T17:25:53.030 回答
0

啊,这很难回答。尽管不同的模型会根据使用情况产生后果,但没有正确的方法。

如果您正在跟踪少量但信息密集型的库存(例如,飞机和零件),您可能需要为每个项目定义一个条目;如果您正在模拟大量几乎没有身份的相同产品(就像您的情况一样),我会关注库存状态。这完全取决于您想要跟踪项目生命周期的深度。

问问自己“是否值得跟踪一盒饼干的这个实例,或者我可以只跟踪一个托盘对我当前库存的影响有多大?” 加油站会为每升燃料创造一个入口吗?

于 2013-09-25T12:28:13.307 回答