购买具有不同购买价格和到期日期的产品的最佳方式是什么?

What is the best way to stock products with different purchase prices & expiration date?

我正在使用 PHP、Mysql 开发库存系统。该系统有 add/update/increase 产品数量和过期日期的购买模块和 decrease/out 产品数量的销售模块。

现在让我感到困惑的是什么,我真正的问题是

最好way/logic 将这些项目分开,以了解在销售页面上以 15 美元的价格和 18 美元的新价格购买了多少产品。

  1. 我是否必须在数据库中存储 2 个或更多数量列?

  2. 我是否应该在我的数据库中多次存储相同的产品?

Currently I'm generating average of and then adding this value as purchase price of product.

你能做一个 'one to many' 与另一个 table 的关系吗?您将拥有一个 table 产品(product_id、product_name 等)。然后是另一个 table,比如 product_inventory(product_inventory_id,product_id(product.product_id 的外键),purchase_price(您购买它们的价格) , 数量(该商品的购买价格数量))。

哦,亲爱的,你的问题表明你真的处于数据库设计的开始阶段。您应该在这么早的阶段解决如此复杂的问题吗?嗯,是的,为什么不...

你的问题的答案是:1. NO!!! 2.也许。

第一个想法很愚蠢。想想看。如果您获得产品的三种不同价格,那么您将需要三列,依此类推...这不是一个好主意。

第二个选项似乎是个不错的解决方案。您有一排 20 件商品,价格为 15 美元,另一排 100 件商品,价格为 18 美元。你可以用这个做大部分事情。平均价格?那么:(20*15 + 100*18)/(20 + 100)。简单。但它很快变得更加复杂。如果您向客户出售 110 件商品怎么办?您将需要更改两行,但是如何更改?第一行 20 项,第二行 90 项?或者从第二个开始全部 100 个,从第一个开始全部 10 个。你不能忽视这个问题,你必须就如何做到这一点制定严格的规则。而且您会发现,随着您添加到系统中的选项越来越多,复杂性会不断增加。会用,但会不屈不挠

然而,您还没有提到第三个选项:在您的 table 中为每件库存商品单独一行。这似乎是对数据库 space 的浪费,但是等等,它确实简化了事情。平均价格?很简单,只需计算包含价格的列的平均价格。即使每件商品都有不同的价格,它也会同样复杂。从库存中提取物品的规则也很简单:只需使用 FIFO 或 FILO 系统。

所以最后一个解决方案显然是可行的方法。