2

注:これはこの質問とは異なります

私は、顧客サービス担当者が顧客から当社のサービスなどに関する情報を得るために使用できる調査を作成する任務を負っています.

私の質問は、質問が保存されているデータベースに質問/回答を次のように保存する方法です。

  • ブール質問1
    • if (false): string question2 (通常、question1 が false であった理由)

これは簡単ですが、質問は複数のレベルでネストできます。

  • ブール質問1
    • if (false) ブール値の質問 2
      • if (true) 文字列 question3
      • if (false) 文字列 question4

データベースに保存する必要がなければ、質問 (および実際には調査全体) を複合として表現しますが、そのようなものをどのように保存するかはわかりません。

4

2 に答える 2

3

質問がグラフではなくツリーを形成する場合、 sql で階層データを表す一般的な方法が 2 つあります。

隣接リスト モデル モデルでは、子 (子の ... の子) を検索するために自己結合を繰り返す必要があります。Hibernate のような ORM を使用している場合、ORM は質問とその子の回答を戻すのに十分な自己結合を処理します。それを行うための ORM がなければ、クエリに自己結合を動的に追加するか、前の結果セットの行ごとに 1 つずつ複数のクエリを実行する必要があります。

通常は Joe Celko に起因する Nested Set Model を使用すると、1 回の選択でツリー全体を取得できますただし、ノードの追加と削除がより複雑になり、すべての行を更新する必要があることを意味します。

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

于 2009-04-14T22:08:20.950 に答える
1

私はこのようなことをすると思います:

Table: Questions
int id
string question

Table: Question Answer Map
int questionId
bool answer
int nextQuestion

質問が多肢選択式の場合は、bool の代わりに int、char、または string を回答に使用できます。

于 2009-04-14T21:53:05.497 に答える