0

この質問はこの投稿に関連しています: さまざまなデータ型の回答を使用した調査用のSQL設計

私は、ほとんどの質問に1〜5の回答のセットがある調査アプリを持っています。次に、数値、日付、文字列など、さまざまな回答タイプを持つ可能性のある質問を行う必要があります。スタックからの提案のおかげで、回答を格納するために文字列列を使用しました。いくつかの質問は多肢選択式であるため、テーブル「質問」とともに、質問に対する可能な回答のセットを含むテーブル「回答」があります。

さて、「該当するものをすべて選んでください」という質問に対する回答をどのように保存すればよいですか?「chosen_answers」などの子テーブルを作成する必要がありますか?または、回答テーブルに、回答者がその回答を選択したことを示す「選択済み」列を含める必要がありますか?

4

5 に答える 5

3

考えられる解決策は、主キー、ユーザーID、質問ID、回答IDの4つの列を持つUsersAnswersテーブルです。

複数の回答を選択できる質問には複数のエントリがあります

于 2009-12-08T14:43:51.630 に答える
0

別のオプション(これがこのような質問のスコアリング方法でもある場合もあります)は、考えられる各回答を個別の「はい/いいえ」の質問として扱い、受験者の回答を記録することです(選択したか、しなかったか) )ブール値として..。

于 2009-12-08T14:56:00.727 に答える
0

これらの調査の質問には、常に1つの普遍的な答えがあります。それは、完了したときに回答をどのように処理するかによって異なります。

たとえば、個々の回答の記録を保持するだけの場合(合計を実行したり、質問xに回答yで回答したすべてのユーザーを検索したりしない場合)、最も簡単な設計は、回答をシリアル化されたフィールドに非正規化することです。 。

合計が必要な場合は、要約テーブルで合計を計算し、クイズの送信時に値を更新すると、シリアル化されたテーブルへの非正規化された回答を回避することもできます。

したがって、特定の質問については、「上記のすべて」を意味する場合に5を保存する方が最終製品にとってより有用かどうか、または4つのオプションのそれぞれを個別に選択する方がより有用かどうかを判断する必要があります。

于 2009-12-08T14:58:44.903 に答える
0

2つの提案があります。

  1. データベースを正規化し、 という名前のテーブルquestion_answer、またはスキーマの命名法により適合するテーブルを作成します。これが私がそれをレイアウトする方法です。

    CREATE TABLE question_answer (
        id INT NOT NULL AUTO INCREMENT PRIMARY KEY,
        user_id INT NOT NULL,
        question_id INT NOT NULL,
        answer_id INT NOT NULL
    );
    
  2. 表に5 つの列を作成しanswers、それぞれが特定の回答を参照します。MySQL では、これらの列をbit(1)値として設定します。

私見ですが、選択肢の数が変化しない限り、オプション 2 を使用します。これはより高速なオプションであり、おそらくスペースも節約できます。

于 2009-12-08T14:52:26.367 に答える
0

多くのオプションを選択するつもりはないので、文字列の回答列にカンマ区切りの値のリストとして回答を保存したいと思います。

ユーザーが質問のある Web ページのチェックボックスのグループから回答を選択している場合 (それが Web アプリであると仮定)、そこからもコンマ区切りのリストが返されます。(ただし、答え「赤、青」は「青、赤」と同じであるため、リストを文字列として比較することはできません。)

于 2009-12-08T14:52:47.410 に答える