2009-04-14 6 views
2

注:これはthis question調査データを構成する方法は?

が好きではない私は、私たちの顧客サービスの人々は私たちのサービスに関するお客様からの情報を取得するために使用できるという調査を構築する使命を帯びてきたなど

私の質問を格納する方法であります文字列question2(通常REA:(偽)場合

  • ブールquestion1
    • :質問はそうのように保存されているデシベルで質問/回答息子question1がfalseた理由)

これは簡単だろう、しかし、質問が複数のレベルを入れ子にすることができます。

  • ブールquestion1
    • (偽)ブールquestion2 場合
      • if(true)string question3
      • もし私がDBに保管していなかった場合、私は複合として質問(そして実際に全体の調査)を表すが、私なり

(偽)の文字列question4私はそれのようなものをどのように保存するのか分からない。

答えて

3

質問がグラフではなくツリーである場合、represent hierarchical data in sqlには2つの一般的な方法があります。

隣接リストモデルモデルは、子供(子供の子供...)のルックアップを繰り返すために自己結合が必要です。 HibernateのようなORMをお持ちの場合、ORMは質問とその子供の回答を返すために十分な自己結合を行うようにします。 ORMを使用しない場合は、クエリに自己結合を動的に追加するか、以前の結果セットの各行に1つずつ複数のクエリを実行する必要があります。

ネストセットモデル(通常はJoe Celkoに帰属します)では、1つの選択でツリー全体を取得できます。しかし、ノードの追加と削除はより複雑で、すべての行を更新する必要があります。

隣接関係リストには、(id, question text, id_next_if_true, id_next_if_false)のような質問表があります。これは、parent_idを保持する子の代わりに、親が2つの子ID、またはnullを保持するという点で、古典的な隣接リストとは異なります。

+0

質問がほとんど変更されないため、ネストされたセットモデルがこの状況ではおそらくより良い選択です。また、私はノードの更新の詳細を処理するコードを見てきました。それは厳しくない。 – MadCoder

+0

ネストされたセットはおそらくより良いです、私は同意します。しかし、この場合、2つ以上の回答を追加することが嫌いです。 – tpdi

1

は、私はこのような何かをするだろうと思う:

Table: Questions 
int id 
string question 

Table: Question Answer Map 
int questionId 
bool answer 
int nextQuestion 

代わりにブールの質問には複数の選択肢であれば、あなたはあなたの答えのためにint型、char型、または文字列を使用することができます。

+0

私はこの構造を何回も使用しました。私はあなたがnextQuestionを意味すると思う.... not nextAnswer。 – DancesWithBamboo

+0

良い眼に感謝します。私はテーブル定義を編集しました。 –

関連する問題