在我的应用程序中,有产品和产品变体组,它具有一组定义的属性,该组的产品必须声明这些属性,并且属性的组合在该产品变体组中是唯一的。
来自亚马逊的示例屏幕:
在图像中,第一个选择菜单显然具有所有值。下一个选择菜单取决于先前选择的值,依此类推。
这些定义的组属性具有分配给它的唯一优先级,在下面的派生表中,该优先级等于属性本身。
对于给定的属性/优先级和给定的属性/优先级-值对列表。我想检索它的可能值。值对的优先级必须小于给定的优先级。
public String[] getProductVariantGroupValues(int productVariantGroupId, int priority, Map<Integer, String> prevValues);
一个例子使它更清楚:
我有一个 sql 语句,其中列出了相关产品定义的所有产品变体组属性:
+---------+----------+-------- + | 产品 | 优先 | 价值 | +---------+---------+---------+ | 1 | 1 | 黑色 | | 1 | 2 | 38 | | 1 | 3 | 点 | | 2 | 1 | 黑色 | | 2 | 2 | 38 | | 2 | 3 | 条纹 | | 3 | 1 | 黄色 | | 3 | 2 | 40 | | 3 | 3 | 条纹 | +---------+---------+---------+ 其他理解的观点*(优先级是任意的,只是为了理解,这种观点是微不足道的)*: +---------+--------+--------+---------+ | 产品 | 值1 | 值2 | 价值3 | +---------+--------+--------+---------+ | 1 | 黑色 | 38 | 点 | | 2 | 黑色 | 38 | 条纹 | | 3 | 黄色 | 40 | 条纹 | +---------+--------------+
priority = 3
用prevValues =调用上述方法{(1, Black), (2, 38)}
应该会产生以下结果数组:{Dots, Stripes}
.
如果black
选择了属性/优先级1
并38
选择了属性/优先级,则属性/优先级2
唯一可能的以下值3
是{Dots, Stripes}
该示例已简化,应支持任意数量的属性/优先级。必须动态创建查询以支持任意数量的较低优先级值。
也许我应该只使用具有一组固定属性的第二个表方法,这将使唯一约束和此查询非常简单。