0

特定のカテゴリに分類される製品のテーブルがありますが、各カテゴリ内の製品には複数のメタデータ追跡フィールドを含めることができます

テーブル: products

 id    name          category     metadata
 1   something          1      blue,red,purple
 2   something else     2      left,right,middle

私は単一の製品テーブルを持つための最良の方法を考えようとしてきましたが、メタデータを便利に圧縮できないようです。今のところ、関連するカテゴリを追跡するためのすべてのメタデータとフィールドを含むテーブルを作成しました(シーケンスは、ドロップダウンなどで注文できるようになっています)。

更新されたテーブル: products

 id    name          category   metadata
 1   something          1         1,2,3
 2   something else     2         4,5,6

テーブル: metadata

 id   category   sequence   option
 1        1         1        blue
 2        1         2        red
 3        1         3        purple
 4        2         1        left
 5        2         2        right
 6        2         3        middle

この形式が理にかなっている場合..製品テーブルの値を検索し、関連するすべてのメタ値を取得するクエリを生成しようとしています。私が抱えている問題は、製品分野で独自の価値を見つけようとしていることです。MySQL検索を実行すると、1、11、21、31LIKE(%1%)などの一致が得られます...デフォルトでフィールドに先頭と末尾のコンマを追加してから、",1,"一意のコンマを検索することを考えました。より良い方法になるために...

推奨事項(形式またはクエリに関する)はありますか?

4

2 に答える 2

4

単一のデータベースフィールド内にコンマ区切りの値を含めることは理想的な設計ではありません。あなたが言及した問題(検索が難しい)を除けば、DBは検索にインデックスを使用できないため、クエリの効率は低下します。

productsテーブルと多対1の関係を持つ別のテーブルproducts_metadataを作成することをお勧めします。* metadata_id *と、productsテーブルにリンクしている外部キーである*product_id*を用意します。それはあなたの仕事をはるかに簡単にします。

于 2012-04-25T10:11:25.367 に答える
1

製品をメタデータにリンクする別のテーブルを追加するとします。2つの列があります:productidとは、それぞれとテーブルmetadataidの関連するエントリを参照します。次に、メタデータをテーブルに保持しなくなりますが、必要に応じて一緒に保持します。productsmetadataproductsJOIN

于 2012-04-25T10:10:48.273 に答える