2

レストランのカスタマー レビューを格納するデータベースを作成するとします。

ここで、レストランが持つ特定の品質 (顧客サービス、食品の品質、雰囲気、価格に見合う価値など) の「品質」というデータベース テーブルと、これらの各品質のより詳細な説明があるとします。

ここで、「Qualities」テーブルの前述の各品質に評価を割り当てる個々のレビューの「Reviews」というテーブルもあるとします。

これはジレンマを引き起こします。「レビュー」テーブルの列数は、「品質」テーブルの行数に依存します。「Qualities」テーブルに評価する新しい品質を追加する場合、「Reviews」テーブルに対応する列を作成して、ユーザーがこの品質を評価できるようにする必要があります。

上記の問題に対してリレーショナル データベースを設計する最善の方法は何でしょうか? 回答にデータベーススキーマを含めると、それが役立つ場合があります。

ありがとう。

4

1 に答える 1

3

おっしゃるとおり、レビュー対象のレストランがサポートする品質ごとの列が必要になります。「品質」が動的である場合は、関連するスコアリングも動的にするのが最善です。したがって、スコアをレビューの列として維持するのではなく、スコアをレビューの各品質にマッピングする行として維持するのが最適です。

私はおそらく次のようなものに行きます:

             restquality (m:n)
                |n    |n
                |1    |
user     restaurant   |
 |1       |1          |1
 |        |n       quality
 +----n-review      |1
           |1       |
           |n       |n
        reviewquality (m:n)
  • ユーザーは多くのレストランについてレビューする場合があります
  • レストランには多くの品質があり、品質は複数のレストランに適用できます (レストラン品質を通じて管理される am:n 関係)。
  • レビューは特定のレストランを「レビュー」し、そのレストランに関連する品質の品質ごとのスコアを示します。これは、reviewquality によって管理されます。このレビューは、この品質にこのスコアを与えます (親レビューがレストランを参照している場合)。

重要なスキーマ:

  • レビュー: reviewid(pk)、ユーザー ID、restid、概要
  • reviewquality: reviewqualityid(pk)、reviewid、qualityid、スコア
  • restquality: restqualityid(pk)、restaurantid、qualityid

お役に立てれば。

于 2013-05-28T10:29:41.640 に答える