ホームページ >データベース >mysql チュートリアル >データベース内の製品バリエーションを効果的にモデル化するにはどうすればよいですか?
多くのアプリケーションには、1 つまたは複数の次元に沿ってわずかに異なる可能性のある製品が含まれます。たとえば、「T シャツ」という商品があるとしますが、サイズ (小、中、大) と色 (白、青、赤) が異なります。
これをモデル化する 1 つの方法データベースでは、Entity-Attribute-Value (EAV) パターンを使用します。これは、本質的には、各行がエンティティの属性とその属性の値を表す単なる大きなテーブルです。ただし、EAV は非効率的でクエリが難しい場合があるため、常に最適なソリューションであるとは限りません。
もう 1 つのオプションは、エンティティの各属性に独自のテーブルを持つ、より正規化されたスキーマを使用することです。たとえば、
PRODUCTS ======== id | product_name
PRODUCT_VARIANTS ================ id | product_id | name
PRODUCT_VARIANT_OPTIONS ======================= id | product_variant_id | name
SKUS ==== id | product_id | sku | priceこのスキーマを使用すると、次のことを表現できます。 data:
PRODUCTS ======== 1 | Widget 1
PRODUCT_VARIANTS ================ 1 | 1 | Size 2 | 1 | Color
PRODUCT_VARIANT_OPTIONS ======================= 1 | 1 | Small 2 | 1 | Large 3 | 2 | White 4 | 2 | Black
SKUS ==== 1 | 1 | W1SSCW | 10 2 | 1 | W1SSCB | 10 3 | 1 | W1SLCW | 12 4 | 1 | W1SLCB | 15このスキーマを使用すると、製品とそのバリエーションを簡単にクエリしたり、各バリエーションの SKU と価格を追跡したりできます。また、重複データを保存する必要がなくなるため、EAV よりも効率的です。ただし、このスキーマの潜在的な欠点の 1 つは、商品に新しい属性を追加するのがより困難になる可能性があることです。たとえば、「マテリアル」という新しい属性を追加する場合は、新しい PRODUCT_VARIANT_OPTIONS テーブルを作成し、そのテーブルに新しい行を追加する必要があります。これは、特に多数の商品がある場合には、大変な作業になる可能性があります。全体として、このスキーマは、特に属性の数が比較的少なく、新しい属性を頻繁に追加する必要があるとは考えられません。多数の属性がある場合、または新しい属性を頻繁に追加する必要があることが予想される場合は、代わりに EAV の使用を検討してください。
以上がデータベース内の製品バリエーションを効果的にモデル化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。