我已经在 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,2,3,4,5
- 库存被定义为 1,3,4 和 1,2,3,4 但不是 1,2,3,4,5
- 当用户选择 1、2、3、4、5 时,1 个可能的期望行为是系统应该使用 1、2、3、4 的数量(这是它可以获得的最接近的组合)。在这种情况下,我们可能不得不使用全文匹配来进行最接近的组合
对于这个问题,你觉得如果上面的做法有什么问题,你会怎么做?