2016-03-24 12 views
2

私は現在、ユーザーが他のユーザーが投稿した投稿を評価できるようにするAndroidアプリを作成しています。データベースデザインに星評価システムを実装するにはどうすればよいですか?

ERD model of Database

これは私の現在の設計である、しかし、私は別のテーブルとして評価を含めたり、メディアのアップロードテーブルに含まれますか?

別のテーブルの場合は、このようなものでしょうか?

評価表:(評価、PostID、Rating_Count、AVERAGE_RATING)

何かもいただければ幸い私のデザインと間違って見える場合!

+0

個々の料金をトラッキングしますか?または1ポスト当たりの平均値ですか? –

+0

私は特定の投稿にそれぞれの個々の投票を記録する必要がある投稿あたりの平均評価を得ると思いますか? –

+1

投稿ごとに評価を追跡する必要があります。これにより、長期的にも柔軟にNF – VikingBlooded

答えて

0

それはすべてが

など、あなたが同じ人から複数の票を持っていることから保つために投票皆を追跡するかどうか、投票アップまたはダウン投票に誰が、あなたは格付けが仕事をしたいかによって異なりますこれは私がやることです:各投票に一意の数値(長い?)RatingIDフィールドを追加し、PostIDフィールドをCommentsテーブルにリンクし、0から5までの値に制限されたRating(整数)フィールドを追加しますあなたが好む)、そしてすべての投票キャストからの平均を計算する(Rating_CountAverage_Ratingフィールドを削除する)。 ビューを定義して、投稿の横に表示する方法を決定するためにルーチンで使用する各投稿の平均評価を計算することができます。

また、ユーザーごとにIDを使用し、名前を使用しません。

だから私のテーブルには、次のようになります。複数回投票からユーザーを保つために、また

RatingID, PostID, UserID, Rating

、テーブルは同じPostIDUserIDのための複数のエントリを許可しませんでした。

1

評価を保存する方法によって異なります。

個々の評価をトラッキングする場合は、あなたは以下と評価表が必要になります。

Column 
--------- 
RatingID (PK) 
Username (FK) (UserDetailsID if you change the primary key of the UserDetails table) 
PostID (FK)  
RatingScore 
DateRated 

アプリでは、あなたはそのPostIDバックごとRankScoreを引くだろうと計算がPostID言ったのカウントをオフに基づいてください。

私は上記の方法をお勧めします。これは、あなたが今後の評価でもっと多くのことを可能にするからです。さらに、Commentsテーブルを使用すると、適切な構造に従うことができます。例。誰が何を何点で評価したかを表示します。

Postテーブルにアタッチする場合は、別のテーブルは必要ありません。テーブルにRating_CountAverage_Ratingを追加するだけです。あなたのアプリでは、投稿が評価されるたびに更新を実行する必要があります。 Rating_CountAverage_Ratingを引いて、Rating_Countを1つ増やして、Average_Ratingを再計算して更新を実行する必要があります。

私の2番目の提案は、あなたのレーティング設定を向上させたい場合、柔軟性が低くなります。

+0

に入ることができます。副作用として、 'UserDetails'テーブルには' UserDetailsID'のプライマリキーがあり、正規化されたデータベースには 'Username'ではありません。参照してください:http://sqlmag.com/database-administration/sql-design-how-choose-primary-key –

+0

ちょうどダブルチェックするために... RatingScoreは、値が1から5までの星のフィールドですか?アプリでは、特定のPostIDのすべての評価点の総合平均を表示します。別のSQL関数に基づいていると見なされますか? –

+0

@ChristianBryantはい、「RatingScore」は特定のユーザーが投稿を評価した値を持ちます。次に、平均値を取得するためにStored Proc(https://dev.mysql.com/doc/connector-net/en/connector-net-tutorials-stored-procedures.html)を作成するか、内部のロジックを実行するかAndroid Appコード –

関連する問題