web-dev-qa-db-ja.com

マルチバリアンス製品

私の現在のシステムは、さまざまなテーブルにさまざまなバリエーションの製品を格納しています。

  • 製品グループ
  • 製品の色
  • 製品化
  • 製品モデル

製品は1つの製品グループの下に置くことができ、複数のバリエーションの色、サイズ、モデルを持つことができます。

データベースを埋めるロジックは、Webサイトのスクリプトに完全に依存するようになりました。つまり、バックオフィスで新しい製品を作成するときは、色、サイズ、モデルを入力して製品に関連付け、それらがそれらの組み合わせであることを確認します。

この構造は急速に成長します。 6つのサイズの3つのカラーバリエーションと2つのモデルのように、すでに36の異なる製品に変換されています。

このデータベースに関してもっと論理的な方法があるのだろうか。問題は、将来、製品が別のプロパティ(たとえば、サブラベル)を取得する可能性があることです。このメソッドを拡張可能にするにはどうすればよいですか?

[〜#〜] eav [〜#〜] について読みましたが、今のところ続けるには情報が多すぎます。深く掘り下げる前に、この問題について他のアプローチがあるのではないかと思います。

2
User2910293

完全なEAVソリューションを使用したくない場合は、次のような方法を試すことができます。

 product_base 
 ------------ 
 id 
 product_group_id 
(その他のフィールド)
 
 
 product_option_types 
 -------------------- 
 id 
説明
 
 product_options 
 --------------- 
 id 
 product_id(fk to product_base.id)
 product_option_type_id(fk to product_option_types.id)
 description 

これにより、次のようなデータが得られます。

 product_base 
 ID |名前| product_group_id 
 ------------ | ----------------- 
 1 |フー| 1 
 
 product_option_types 
 ID |説明
 ------------------ 
 1 |色
 2 |サイズ
 3 |モデル
 4 |サブラベル
 
 product_options 
 ID | product_id | product_option_type_id |説明
 -------------------------------------------- ------------- 
 1 | 1 | 1 |赤
 2 | 1 | 1 |緑
 3 | 1 | 2 |小さい
 4 | 1 | 2 |大
 5 | 1 | 3 |特別版
 6 | 1 | 3 |標準版
 7 | 1 | 4 |バー

つまり、2色(赤と緑)、2つのサイズ(小と大)、2つのモデル(標準と特殊)、およびサブラベル(バー)を持つ「Foo」製品になります。

product_optionsでは、(product_id, product_option_type_id, description)に一意の制約が必要になることに注意してください。

さらに進んで、product_options.descriptionの値を別のテーブルに正規化しようとすることもできますが、それは価値があるよりも複雑な場合があります。