0

私のシステムでは、マネージャーが投票を作成して世界に公開し、投票へのリンクを持っているユーザーが回答できるようにします。

複数の回答を受け取るように設計された質問があるため、ユーザーは 1 回の回答で複数の気晴らしを選択できます。

DB の応答テーブル構造

  • ID
  • ActivityID - 投票 ID
  • 値 - 地区の値
  • タイムレスポンス

データベースでは、現在、各応答を個別に保存しています。

例を挙げます 投票に4つの地区があるとしましょう (a,b,c,d) ユーザーは次の地区を選択します (a,b,c)

応答テーブルは次のようになります。

   ID       ActivityID      Value    TimeResponse
    1           234            a        01/01/2012 
    2           234            b        01/01/2012
    3           234            c        01/01/2012

したがって、ID を数えようとすると、特定の投票で回答された地区の数を表す数字 3 が得られます。

しかし、特定の投票でユーザーごとの応答数が必要なので、どうにかしてこれら2つを組み合わせる必要があります...

これまで、次の解決策を考えていましたが、どちらも良くありません。

  • 最初の解決策は、ユーザーの IP の列を追加することでしたが、ユーザーの IP を取得できない場合があります。
  • 2 番目の解決策は、sessionIDManager を使用してユーザーの sessionID の列を追加することでしたが、ユーザーが 2 回応答した場合 (2 つの応答)、同じセッション ID が格納されます。

参考までに、アンケートに回答するユーザーは匿名です。

また、システム要件の 1 つは、ユーザーが投票に複数回回答できるようにすることです。

4

1 に答える 1

1

私が見ることができる2つのアプローチがあります。

1 つは、ユーザーが投票に回答するたびに UUID を生成することです。データベース内にAnswerIDなどの列を作成し、各応答の行を作成するときにこの同じ UUID を使用します。C# では、UUID を で作成できますGuid.NewGuid()その後、個別のAnswerID値を照会することで、応答の数をカウントできます。

2 番目のアプローチは、特定の質問に対する回答のセットごとに 1 つの行を使用することです。たとえば、ユーザーが A、B、C と回答した場合、その回答を「A/B/C」として保存します。これにより、特定の回答の総数を照会することが難しくなりますが、一部のデータベース システムではこれが容易になる場合があります (たとえば、PostgreSQLにはインデックス可能な配列型があります)。

お役に立てれば!

于 2012-10-05T15:53:52.253 に答える