每个瓶子应该作为单个InventoryUnit对象存储在我的数据库中吗?
减少库存量的最佳做法是什么?如果我卖瓶子,我会销毁一个InventoryUnit吗?或者我应该只添加一个可以"出售的状态列"或"库存"?
我担心性能,Postgres可以处理数十万个InventoryUnit对象吗?
我真的很感激这方面的一些帮助。对不起,我是一个前端人员,所以我真的很厌倦数据库建模...
答案 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)
啊,这是一个很难回答的问题。没有正确的方式虽然不同的模型会根据使用情况产生影响。
如果您正在跟踪数量较少但信息量较大的股票(例如,飞机和零件),您可能需要为每个项目定义一个条目;如果你正在模拟大量相同的产品,几乎没有身份(就像你的情况似乎),我会专注于库存状态。这一切都取决于你想要追踪物品生命周期的程度。
问问自己“跟踪一箱破解者的实例是否值得,或者我可以追踪托盘对我现有库存的影响程度?”加油站会为每升燃料创造一个入口吗?