2

私は mySQL を初めて使用するので、テーブルの作成について助けが必要です。条件は次のとおりです。

  1. 各ユーザーは、レストランごとに 1 回だけ評価できます (2 回目以降の評価は、前の記録が更新されます)。

  2. 平均 = (AverageQuality + AverageService + AverageClealiness)/NumofRates

  3. AverageQuality = すべてのユーザーの (userRateQuality) / ユーザー数のレート..

  4. AverageService = すべてのユーザーの (userRateService) / ユーザー率の数..

以下は私のテーブルです:

CREATE TABLE IF NOT EXISTS `ratings` (
    `Average` int(5) NOT NULL,
    `AverageQuality` int(5) NOT NULL,
    `AverageClealiness` int(5) NOT NULL,
    `AverageService` int(5) NOT NULL,
    `NumofTotalRates` int(11) NOT NULL,
    `userID` varchar(20) NOT NULL,
    `restaurantID` int(11) NOT NULL,
    `userRateQuality` int(5) NOT NULL,
    `userRateService` int(5) NOT NULL,
    `userRateClealiness` int(5) NOT NULL
)

私はそれが奇妙であることを知っていますが、私はこの質問に数日間悩まされており、このスキーマを修正する方法やより良いスキーマを構築する方法がわかりません. 提案/ガイダンスが必要です。私のテーブルを改善するのに役立つかもしれないので、返信または質問をしてください. ありがとう!

4

1 に答える 1

5

テーブル構造は実際には意味がありません。品質、清潔さ、サービスに対する各ユーザーの評価を保存する必要があります。だからあなたは次のようなことをすることができます

CREATE TABLE IF NOT EXISTS ratings (
   userID varchar(20) NOT NULL, 
   restaurantID int(11) NOT NULL, 
   userRateQuality int(5) NOT NULL, 
   userRateService int(5) NOT NULL, 
   userRateClealiness int(5) NOT NULL )
)

このデータを取得したら、クエリを実行して平均評価を取得できます。誰かが新しい評価を追加するたびに平均が変化するため、ユーザーの評価を格納する同じテーブル内に平均評価を格納することは望ましくありません。平均を取得するには、MySQLAVG関数を使用できます。 http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

于 2013-03-15T04:05:18.907 に答える