1

まず、タイトルがあいまいで、質問が要約しにくい場合はお詫び申し上げます。必要に応じて自由に編集してください。

私が構築している Web サイトには、属性を持つカテゴリ内の製品があります (カテゴリは常に拡張されています)。データベーステーブルのフィールドではなく、色、サイズ、重量などの属性)。これらの属性は、カテゴリによって定義されている場合と定義されていない場合があり、場合によっては具体的に製品によって異なります。

Web サイトを使用する個人は、特定の属性 (「緑、重さ 4 ポンド未満、評価が 3 つ星以上」など) に一致するアイテムを検索するクエリを作成し、そのクエリをタプルとしてデータベースに保存する必要があります。参照できるテーブルの。これらはエンドユーザーになるため、実際にクエリを自分で作成することはできません。また、クエリの種類によってはかなりの冗長性が存在する可能性があり、これらのクエリの数はアイテムの数よりも多いことに注意してください。


私の最初の考え:

すべてのアイテムを 1 つのテーブル ( items) にid格納category idしますname。属性タイプattribute_typesid, name, type(int、string、enum など) に格納します。item_idattribute_type_id、およびを使用して、属性を別のテーブルに格納しますvalue

次に、実際にデータベースにクエリを実行しているかのように、HTML の選択内容に基づいてクエリを作成し、正確なクエリを保存して、 and を使用してテーブルに文字列として保存しidますquery。クエリを格納する前に、その存在を確認してください。


これは機能するように見えますが、これが最善の方法であるとは想像できません。より効率的で、率直に言って見苦しくないソリューションはありますか? アイテムを適切な方法で保管していますか?

ありがとう、ジェームズ

4

1 に答える 1

1

特定の属性とカテゴリの数が十分に少ない場合、これは通常、Concrete Table Inheritance (またはその派生 ) を使用して解決されます。そうでない場合は、Entity-Attribute-Valueモデルが必要です。複雑なクエリを実行するのは困難です。 、長期的には、GIGOにかなり早くつながる可能性があります。

Magento DB スキーマ

もう 1 つの代替アプローチは、MongoDBやシリアル化された BLOB などのスキーマレス データストアを使用することです。

于 2012-06-21T00:23:11.963 に答える