如何处理产品变化的库存?

时间:2013-03-15 04:26:26

标签: mysql inventory-management

我已经多次询问过这个问题,但我还没有找到适合我的答案。

我正在设计一个电子商务系统,我们有一个简单的库存管理系统。基本上,每个产品可以具有许多属性,并且每个属性变体集可以具有不同的数量。产品和属性之间的关系很多,并且在其他地方进行管理,库存表只关注“数量”管理。

所以我当前的方法是将属性值id的组合存储为数据库中的字符串(并且md5并存储在另一列中以便更快地搜索)。这种方法允许我在给定属性列表的情况下快速搜索库存数量,并且还允许我通过管理员轻松编辑。

该表具有以下列(我将其缩短一点以仅关注主结构)

  `id` INT UNSIGNED NOT NULL ,
  `product_id` INT UNSIGNED NOT NULL ,
  `container_id` INT UNSIGNED NULL ,
  `lot_id` INT UNSIGNED NULL DEFAULT NULL ,
  `facility_id` INT UNSIGNED NULL DEFAULT NULL ,
  `inventory_item_status_type_id` INT UNSIGNED NOT NULL ,
  `feature_value_ids` TEXT NULL DEFAULT NULL ,
  `key` VARCHAR(255) NULL DEFAULT NULL ,
  `serial` VARCHAR(255) NULL ,
  `quantity_onhand` INT UNSIGNED NOT NULL DEFAULT 0 

这种方法的缺点是

  1. 如果产品具有以下属性:1,2,3,4,5
  2. 库存定义为1,3,4和1,2,3,4但不是1,2,3,4,5
  3. 当用户选择1,2,3,4,5时,1个可能的期​​望行为是系统应使用1,2,3,4的数量(这是它可以获得的最接近的组合)。在这种情况下,我们可能必须使用全文匹配最近的组合
  4. 对于这个问题,您认为上述方法是否有任何问题,您将如何区别对待?

1 个答案:

答案 0 :(得分:0)

如果您可以节省时间来更新包含以下内容的表:属性id tuple => product_id列表每次产品表中都有更新时,可以使用动态编程快速搜索属性的子集。

我不确定为什么你需要md5属性值ids字符串才能搜索完全匹配。 MySQL应该能够索引任意列。