2

フォーラムを検索したところ、アンケートのデザインに関する投稿がいくつかありましたが、特定のトピックについて話し合いたいと思います。さらに、これは非常に一般的な設計上の問題です。

アンケートの回答をデータベースに保存したいと考えています。一部の応答はフリー テキスト (例: varchar) であり、その他の応答は複数選択 (例: FK) です。その違いをどのようにモデル化しますか?

私は2つのアプローチを見てきました-(詳細は忘れてください)。

アプローチ A: 2 つのテーブルを使用します。1 つはテキスト応答用で、もう 1 つは複数選択応答用です。

Table: text_response
some_stuff ----[*]
text ----------[varchar]

Table: mc_response
some_stuff ----[*]
optionID -----[FK to selected option]

*-not relevant to the disccussion... ResponseID, QuestionID, SurveyID, whatever

アプローチ B:両方のテーブルを「マージ」し、応答タイプに応じて 1 つの列のみを使用します。

Table response
some_stuff ----[*]
optionID -----[FK to selected option]
text ----------[varchar]

どちらを選択する必要がありますか (ある場合)? 議論を一般的で誰にとっても役立つものにするために、一般的な目的で賛否両論を述べたいと思いますが、それが何らかの文脈に役立つ場合は、非常に動的なアンケートシステムに使用します (ユーザーは独自の投票とクエリを作成できます)。私はパフォーマンスについてはあまり気にしませんが、コードの単純さと保守には気を配っています。

4

2 に答える 2

2

アプローチ B に進みます。アプローチ A は意味がありません。理由は次のとおりです。

  1. 1 つの論理オブジェクトを表す 2 つのテーブルResponseはお勧めできません。直感的ではありません。

  2. アプリケーション ロジックは複雑になります。これを行うのは複雑です。「アンケート ID = X のすべての回答を取得する」には、2 つのテーブルにクエリを実行する必要があります。

  3. 答えを得るquestionTypeには、どのテーブルにクエリを実行するかを決定する必要があります。

  4. 応答の最初の 3 つの選択肢が複数の選択肢であるような混合バッグresponseが必要であり、3 つの選択肢が回答しなければならないものと一致しない場合、人々は自分の意見を記入する可能性があるとします。Response同じ質問を 2 つの表に分割しますか?

于 2012-06-02T02:16:25.900 に答える
1

私はアプローチBを選びました

  • 必要なテーブルは 1 つだけです
  • データは通常の形式です (冗長性なし)
  • 保守が簡単 (テーブルが 1 つなので)
于 2012-06-02T02:14:27.603 に答える