1

衣料品のデータベースがあるとします。他の多くのフィールドに加えて、データベースは製品ごとに異なるカテゴリの評価(10点満点)を保存する必要があります。

たとえば、1つのカテゴリは「機会」である可能性があります。機会は次のようになります。

オフィスに着る結婚式に着るデートに着る...葬儀に着る

各製品には、これらのそれぞれについて10点満点のスコアを割り当てる必要があります。したがって、1つの製品には次のものがあります。

オフィス:5結婚式:7日付:10葬儀:0

これは、アイテムが陽気で、控えめすぎず、フォーマルすぎないことを示しています。

このようなカテゴリは多数あり、これらは検索アルゴリズムの一部として使用されるため、速度が問題になる可能性があります。また、製品テーブルが大きくなりたくありません。これは、各応答に独自の列があるため、これを製品テーブルに格納することに不安があることを意味します。

結合のある別のテーブルを除いて、おそらくこの方法で格納しますか?適度に柔軟でエレガントなソリューションを探しているだけです。

はっきりしない場合はお知らせください。

PSそれが違いを生むならMySQLを使用しています...

編集:categoryテーブルとproduct_id、category_id、scoreの結合テーブルがうまく機能するとは思いません。結合内の各スコア列(たとえば、wedding_scoreなど)にエイリアスとして名前を付けるか、複数のスコア列を返す必要があります(カテゴリごとに1つ)。

4

3 に答える 3

1

あなたは正しい方向に進んでいます。「カテゴリ」のテーブルを用意します。中間テーブルには2つの列があり、1つは製品のPK、もう1つは製品のPKです。プラススコアの3分の1。かなり標準的なパターン。次に、通常、中間テーブルには、複合PK(たとえば、productid + categoryid)とcategoryidの別の非一意のインデックスがあります。

于 2009-02-22T21:28:40.130 に答える
1

編集: カテゴリ テーブルと、product_id、category_id、およびスコアを含む結合テーブルを持つことはうまく機能しないと思います。結合内の各スコア列 (wedding_score など) にエイリアスとして名前を付けるか、複数のスコア列 (カテゴリごとに 1 つ) を取得する必要があります。

さまざまなスコアを同じように扱うことができるため、これが正しい方法だと思います。スコア タイプが追加、名前変更、削除などされても、ほとんどのコードを調整する必要はありません。

この情報を集約するための複雑な結合が心配な場合は、1 つまたは 2 つのビューが役立つかもしれません。

于 2009-02-22T23:52:08.663 に答える
0

リレーショナルデータベースはリレーションシップを格納するために最適化されているため、アイテムの説明を格納するためのテーブル、スコアリングカテゴリ(スコアの説明を含む)用のテーブル、および結合テーブル(スコアするアイテム)が完璧な答えのようです。

欠点は何ですか?ええと、各アイテムにはいくつかのスコアレコードがあります、それは本当です。また、クエリブラウザではそれほど読みやすくなりません。しかし、正しいキーとインデックスがあれば、必要な方法で使用するのに十分な速度になります。

于 2009-02-22T23:39:57.177 に答える