1

ねえ、私はかなり長い間私を悩ませている問題についてしばらく頭を悩ませていました.

基本的に、非常に長いオンライン アンケートがあり、回答を格納するために mySQL データベースをどのように設計すればよいかよくわかりません。

だからここに私の質問があります:

  1. 1 人 (アンケートを受ける人) ごとに 1 つの行を作成する必要がありますか?
  2. 多くの親子の質問があります (たとえば、「はい」と答えた場合は次の質問に答え、それ以外の場合は無視します)。それらをどうするか?
  3. 1 つの質問に対して、その人は複数の回答に答えることができます。それらをどのように処理しますか?

私が念頭に置いているのは、各列が質問である 1 つのテーブルを作成することです。アンケート回答者を考慮しない親子の質問がある場合、そのまま残されblankます。複数の回答を持つことができる質問については、n列を作成します (ここでn、可能な回答の数を表します)。

どう思いますか?それは適切ですか、それともデータベースを設計するためのより良い方法がありますか。

ありがとう

4

1 に答える 1

2

質問を変更/追加するのは難しいので、各列が質問であることは私には悪い考えのように思えます。DB 構造の変更は、ごくまれに行う必要があります。

表:答え

答えについては、次の列を持つすべての答えを保持する 1 つのテーブルと言えます。

  • 個人ID(この特定の質問に回答した人)
  • 質問 ID (この行でどの質問が回答されたか)
  • 回答 (回答自体、文字列/数値のいずれか)

その人が同じ質問に対して複数の回答をした場合、2 つの回答に対して 2 つの別々の行を配置します。ご覧のとおり、1 つの回答 (1 人による) ごとに 1 つの行があります。したがって、合計 10 の質問があり、2 人がすべての質問に 1 回回答した場合、テーブルには 20 行が表示されます。

ある人がいずれかの質問に回答しなかった場合、この質問とその人の行はありません。

表: question_order

あなたには別の要件があるように思えます。それは、質問の流れを制御することです。どの質問が次に来るかです。次の列を使用して、このフローを別のテーブルに保持する必要があります。

  • 質問 ID (現在の質問)
  • 回答条件(文字列\数値、質問に応じて)
  • 次の質問 ID

このテーブルでは、質問間のすべての接続を保持します。質問 1 が常に質問 2 につながる場合、プット[1, NULL, 2]- この場合、NULL は可能なすべての回答を表します。質問 2 が「はい」と答えた場合にのみ質問 3 につながる場合は、 を入力してください[2, "yes", 3]。質問 2 が「いいえ」と答えた場合にのみ質問 4 につながる場合は、[2, "no", 4]などを入力してください。

表: 質問

役立つと思われるもう 1 つの表は、質問の表です。この表には、質問が受け入れられる内容に関する詳細情報が表示されます。たとえば、複数の回答をサポートする質問を知りたい場合は、次の列を使用します。

  • 質問ID(私たちが話している質問)
  • 複数の回答をサポート (bool)

この表では、通常、質問ごとに行があります。

于 2013-01-31T21:05:52.797 に答える