2013-01-07 10 views
5

カテゴリでフィルタリングする製品を実装したいのですが、正しいDBスキーマについて質問があります。 今の私は、次の表があります。製品属性のデータベーススキーマ

カテゴリー

1. id 
2. category 
3. description 

製品

1. id 
2. category_id 
3. product 
4. image 
5. price 

属性:

1. id 
2. attribute 

Category_Attributes

1. category_id 
2. attribute_id 

そして、私が持っている問題は、彼らが値の種類を格納する必要が叫ぶ何の表Iは、作成する必要があり、何列である属性値を、製品には、属性値など

つの以上のテーブルを作成するために正常です10

Attributes_Values

1. attribute_id 
2. value_id 

Products_Attributes_Values

1. product_id 
2. attribute_id 
3. value_id 

私は最後のテーブルにめちゃくちゃました。保存してフィルタリングする方が良いでしょうか?あなたが達成しようとしている何

+0

最後の3つのテーブルで達成したいことの詳細を説明できますか?それぞれのテーブルは何を意味するのですか?値は標準的なリストの意味ですか?このリストはカテゴリに依存しますか?製品が属性に対して複数の値を持つことはできますか?要件をよく理解せずにアドバイスをするのは難しいです。 –

+0

たとえば、私はカテゴリ "ビーズ"を持っています、それはいくつかの属性を持っています:直径、材料、梱包。直径は8mm、10mm、12mmなどとなり、材料はプラスチック、木製、ガラス、金属、セラミックを変えることもできます。管理領域では、すべての属性を選択し、唯一のオプションを選択したいと考えています。カタログでは、商品を自由にフィルタリングしたいと考えています。たとえば、直径10mm、12mm、素材セラミックのビーズを探しています。 – UAMoto

+0

はい、各カテゴリは属性を持ち、それらの属性は値を持ちます。 – UAMoto

答えて

8

エンティティ - 属性値(EAV)または可能性行モデリングソリューションです。このタイプの構造は、多種多様な理由のために大いに眉をひそめていることに注意してください。

しかし、私はEAVはそれがない場合を除き、悪であること(例えばhereherehere、およびhere)主張してきました。それらのまれな例外の1つは、製品の特性を追跡する製品カタログの場合で、これらの特性が興味深いものではない場合(システムへ!)、これらを取得して印刷する必要がある場合を除きべき

enter image description here

は、あなたが特定のカテゴリの製品をどの属性を記述している。このようなモデルでやっている:商品等のWebページや比較グリッド、上

は、このようなデザインを考えてみましょうそれらの属性が持つ可能性のある値、各特定の製品が持つ価値ch属性。

このデザインには、EAVが課す通常の制限がすべてあります。しかし、「どのビーズの直径が8mmですか?」などの質問をする場合は、それはかなり簡単です。

+0

'eav'を使うとパフォーマンス上の問題に直面しませんか?パフォーマンス上の問題を解決するためにどのような提案をしたら、これを防ぐ方法もありますか? – fresher

+0

@PhpBeginnerはい、EAVを使用することから生じるさまざまな問題があります。そのため、多くの人々が反パターンとみなしています。 EAVが完全に適している非常に特殊な状況を除いて、私自身はEAVを使用しません。私は、[ここ](http://stackoverflow.com/questions/11779252/entity-attribute-value-table-design/11972029#11972029)など、オンライン製品カタログがそのようなアプリケーションの1つであると主張してきました。このシナリオでは、EAVはパフォーマンスの問題ではなく、完全な意味データモデリングが適用された場合よりもはるかに簡単なコードで動作します。 –

関連する問題