私のアプリケーションには、製品と、このグループの製品が宣言しなければならない定義済みの一連のプロパティを持つ製品バリアント グループがあり、プロパティの組み合わせはその製品バリアント グループ全体で一意です。
アマゾンの画面例:
画像では、最初の選択メニューには明らかにすべての値があります。次の選択メニューは、以前に選択した値に応じて異なります。
これらの定義されたグループ プロパティには、固有の優先順位が割り当てられています。次の派生テーブルでは、プロパティ自体と同じです。
特定のプロパティ/優先度、およびプロパティ/優先度と値のペアの特定のリスト。可能な値を取得したい。値のペアの優先度は、指定された優先度よりも小さくする必要があります。
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}
この例は簡略化されており、任意の数のプロパティ/優先度をサポートする必要があります。任意の数の優先度の低い値をサポートするには、クエリを動的に作成する必要があります。
おそらく、一意の制約とこのクエリを非常に単純にするプロパティの固定セットで2番目のテーブルアプローチを使用する必要があります。