0

我已经在 SO 上多次看到这个问题,但我还没有找到适合我的答案。

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

因此,我目前的方法是将属性值 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 回答 1

0

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

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

于 2013-03-15T13:32:48.713 回答