2010-12-29 5 views
0

投票テーブルを作成してパフォーマンスを最大化しようとしています。投票はUPまたはDOWNしかないので、bitを使用すると思います。1 = up0 = downは直感的ではありませんか?そこには良い方法がありますか?など投票テーブルスキーマのアイデアに関するヘルプ

UserVotes (3 way primary key between all three tables) 
+----------+----------+-------------+ 
| UserID | IsUp | CommentID | 
+----------+----------+-------------+ 
| 1  | 1  | 99   | 
| 2  | 0  | 99   | 

ユーザーが投票アップまたは投票ダウンボタン

If VoteUpButtonClicked Then 
    VoteService.Add(userID,True, CommentID) 
End If 

If VoteDownButtonClicked Then 
    VoteService.Add(userID, False, CommentID) 
End If 

をクリックするとアップデートが起こるのだろう

その後の呼び出しは、 "カウント"

Dim TotalUpVotes = VoteServce.QueryVotes().Where(Function(v) v.IsUp And v.CommentID = CommentID).Count 
Dim TotalDownVotes = VoteService.QueryVotes().Where(Function(v) Not v.IsUp And v.CommentID = CommentID).Count 
になります

私はSQL Server 2008とLinqをSQLに使用しています。

はい、私はユーザーが投票を削除することを許可したいと思います。

についてどのように
+0

テーブルをどのように使用しますか? 1秒あたりの更新回数はいくつですか? 1秒あたりのクエリ数はいくつですか?どのような種類のクエリですか? –

+0

また、どのデータベースとバージョン? –

+0

ユーザーは投票を削除できますか? – hunter

答えて

0

私は投票表は、投票のライブの和を保つ必要があります:

UpVote int型 DownVote int型

1を適用コラムユーザーの投票に。ユーザーは自分の投票を削除した場合

ストアログ表の票が

ユーザーID CommentID ISUP(ビット)

、あなたはUpVoteまたはDownVoteのいずれかにISUPに質問して-1することができます。

+0

@ハンターの答えを補うのは悪い考えではないかもしれません。ありがとう –

3

UserId (int) PK 
CommentId (int) PK 
Vote (tinyint) (1 or -1) 
Voted (Date) 

次に、あなたは、単にあなたのプロジェクトの要件を達成するためのロジックでテーブルをラップされる1であるため、値

+0

これは私の最も頻繁なヒットテーブルの1つなので、パフォーマンスを念頭に置いて設計しようとしています。 'tinyint/sum'は' bit/count'と同様に機能しますか? –

+0

'CommentID'を忘れないでください。 –

+0

@Timそれは後で追加されましたが、LINQPadを使用するか、SQLプロファイラでクエリが来るのを見ると – hunter

0

が、私はそれを引き受ける合計することができますそれが直感的であるかどうかという疑問に答える必要があるのですか?それはあなたに直感的である必要があります。

関連する問題