17

Webアプリケーションの投票システムを作成し、投票を(SQL)データベースに保存するのが最善の方法であるかどうか疑問に思います。

投票システムは、StackOverflowの投票システムと似ています。私は今、賛成票と反対票を異なるテーブルに保存する必要があるかどうかを考えています。そうすれば、投票数をすべて数えるのが簡単になります。反対票。一方、ユーザーまたは投票済みアイテムのすべての投票を見つけるには、2つのテーブルをクエリする必要があります。

別の方法は、この投票が賛成票か反対票かを指定するブールフィールドを持つ1つのテーブルです。しかし、投票のカウントアップまたはカウントダウンは非常に遅く(投票数が多い場合)、ブールフィールドのインデックス(私が知る限り)はあまり意味がありません。

データベース構造をどのように作成しますか?1つまたは2つのテーブル?

4

4 に答える 4

18

コメントに関しては、Zardozに最適なソリューションを見つけました

彼は常に開票を望んでおらず、可能な限り多くの詳細を必要としています。したがって、解決策は両方を組み合わせたものです。

  1. 投票数を格納するために、考慮されるテーブルに整数フィールドを追加します(オーバーフローが発生しないことを確認してください)。
  2. 投票を記録するための追加のテーブルを作成します(ユーザー、投稿、日付、アップ/ダウンなど)

ログテーブルで投票を挿入/削除/更新するときに、トリガーを使用して「投票数フィールド」を自動的に更新することをお勧めします。

于 2010-12-10T00:34:11.083 に答える
12

votes投票がちょうど上/下の場合は、投稿にリンクし、が1または-1(上/下)のテーブルを作成できます。このようにsumして、一度に行うことができます。

于 2010-12-10T00:00:59.540 に答える
1

https://meta.stackexchange.com/questions/1863/so-database-schema

一見の価値があるまたは

http://sqlserverpedia.com/wiki/Understanding_the_StackOverflow_Database_Schema

于 2010-12-09T23:46:22.290 に答える
1

ユーザーと投票されているエンティティの間のリンクテーブルが必要になると思います。これにより、どのユーザーがすでに投票したかを確認し、それ以上の投票を送信できないようにすることができます。テーブルは、賛成票か反対票かをブール値で記録できます。

クエリを簡単にするために、投票されたエンティティに現在の投票集計フィールドを保存することをお勧めします。これを省略した場合、サイズの節約は無視できます。

于 2010-12-09T23:49:14.690 に答える