库存管理:如何处理数据库中已售出的库存单位?

时间:2013-09-25 11:22:12

标签: ruby-on-rails postgresql database-design inventory inventory-management

我卖酒。所以我有一个瓶子的清单。到目前为止,我有一个" InventoryUnit"引用product和line_item的模型。

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

  2. 减少库存量的最佳做法是什么?如果我卖瓶子,我会销毁一个InventoryUnit吗?或者我应该只添加一个可以"出售的状态列"或"库存"?

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

  4. 我真的很感激这方面的一些帮助。对不起,我是一个前端人员,所以我真的很厌倦数据库建模...

3 个答案:

答案 0 :(得分:7)

  

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

如果您可以单独出售,那么是,否则通过案例/框跟踪它们。

  

两个。什么是减少库存的最佳做法?如果我卖瓶子,我会销毁一个InventoryUnit吗?或者我应该添加一个   status-column可以“出售”还是“有库存”?

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

瓶子破碎?将其从库存位置移至“损坏”位置
瓶子不见了?将其从库存移至“以太”位置
发现一个随机的瓶子?将其从“以太”移至库存
卖了一瓶?将其从库存移至“已售出”
买了一瓶?将其从购买转移到库存

  

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

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

要记住的其他一些事项:

  • 你可以卖东西,它会被退回,你把它放回库存
  • 你可以买东西,但这不对,所以你把它发回给卖家
  • 你可以出售你不拥有的东西(寄售,或者不在库存中)
  • 您可能在库存中有一些目前尚未出售的商品。

对于会计库存,您还需要根据免费的FOB状态计算您负责的入境和出境货物的货物。

如果您制作/组装任何东西,以及订购费用等,您需要计算原料(DIY酿酒产品吗?)并正在进行中。

寄售商品不计入会计库存。

答案 1 :(得分: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数量。

答案 2 :(得分:0)

啊,这是一个很难回答的问题。没有正确的方式虽然不同的模型会根据使用情况产生影响。

如果您正在跟踪数量较少但信息量较大的股票(例如,飞机和零件),您可能需要为每个项目定义一个条目;如果你正在模拟大量相同的产品,几乎没有身份(就像你的情况似乎),我会专注于库存状态。这一切都取决于你想要追踪物品生命周期的程度。

问问自己“跟踪一箱破解者的实例是否值得,或者我可以追踪托盘对我现有库存的影响程度?”加油站会为每升燃料创造一个入口吗?