私の現在のシステムは、さまざまなテーブルにさまざまなバリエーションの製品を格納しています。
製品は1つの製品グループの下に置くことができ、複数のバリエーションの色、サイズ、モデルを持つことができます。
データベースを埋めるロジックは、Webサイトのスクリプトに完全に依存するようになりました。つまり、バックオフィスで新しい製品を作成するときは、色、サイズ、モデルを入力して製品に関連付け、それらがそれらの組み合わせであることを確認します。
この構造は急速に成長します。 6つのサイズの3つのカラーバリエーションと2つのモデルのように、すでに36の異なる製品に変換されています。
このデータベースに関してもっと論理的な方法があるのだろうか。問題は、将来、製品が別のプロパティ(たとえば、サブラベル)を取得する可能性があることです。このメソッドを拡張可能にするにはどうすればよいですか?
[〜#〜] eav [〜#〜] について読みましたが、今のところ続けるには情報が多すぎます。深く掘り下げる前に、この問題について他のアプローチがあるのではないかと思います。
完全な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
の値を別のテーブルに正規化しようとすることもできますが、それは価値があるよりも複雑な場合があります。