タイトルが少しでも参考になれば幸いです。MySQL をデータベースとして使用しています
製品のデータベースを構築していますが、製品のバリエーションの保管価格/SKU を処理する方法がわかりません。製品には無制限のバリエーションがあり、各バリエーションの組み合わせには独自の価格/SKU/その他があります。
これは、現時点で製品/バリエーションテーブルをセットアップする方法です。
PRODUCTS
+--------------------------+
| id | name | description |
+----+------+--------------+
| 1 | rug | a cool rug |
| 2 | cup | a coffee cup |
+----+------+--------------+
PRODUCT_VARIANTS
+----+------------+----------+-----------+
| id | product_id | variant | value |
+----+------------+----------+-----------+
| 1 | 1 | color | red |
| 2 | 1 | color | blue |
| 3 | 1 | color | green |
| 4 | 1 | material | wool |
| 5 | 1 | material | polyester |
| 6 | 2 | size | small |
| 7 | 2 | size | medium |
| 8 | 2 | size | large |
+----+------------+----------+-----------+
(`products.id` is a foreign key of `product_variants.product_id`)
このサンプル データで SQLFiddle を作成しました: http://sqlfiddle.com/#!2/2264d/1
ユーザーは任意のバリエーション名を入力でき ( product_variants.variant
)、それに任意の値を割り当てることができます ( product_variants.value
)。ユーザーが入力できるバリエーション/値の量に制限があってはなりません。
これが私の問題が発生する場所です: 誰かが以前に存在しなかったバリアントを持つ製品を追加するたびに、新しいテーブル/列を追加せずに各バリエーションの価格/SKU を保存します。
各バリエーションの価格は同じかもしれませんが、SKU は各製品に固有です。たとえば、製品1
には 6 つの異なる組み合わせ (3 色 * 2 素材) があり、製品2
には 3 つの異なる組み合わせ (3 サイズ * 1) しかありません。
組み合わせをテキストとして保存することを考えました。
+------------+-----------------+-------+------+
| product_id | combination | price | SKU |
+------------+-----------------+-------+------+
| 1 | red-wool | 50.00 | A121 |
| 1 | red-polyester | 50.00 | A122 |
| 1 | blue-wool | 50.00 | A123 |
| 1 | blue-polyester | 50.00 | A124 |
| 1 | green-wool | 50.00 | A125 |
| 1 | green-polyester | 50.00 | A125 |
| 2 | small | 4.00 | CD12 |
| 2 | medium | 4.00 | CD13 |
| 2 | large | 3.50 | CD14 |
+------------+-----------------+-------+------+
しかし、このデータを表現するための、より優れた正規化された方法が必要です。仮定の状況: $10 未満の青色の製品を検索できるようにしたいと考えています。上記のデータベース構造では、テキストを解析せずに行うことはできません。これは避けたいことです。
どんな助け/提案も大歓迎です=)