2017-11-14 1 views
0

私は質問の束に答えることがいくつかのユニークな結果につながる推奨アンケートを作成する必要があります。途中での決定が最終結果に影響するはずです。リレーショナルデータベース:外部キーはどこに属しているのか?交代モデルの階層?

非常に基本的なものにするのはいいですから、QuestionsAnswersという2つのモデルがあります。各質問には、2つの答えを持っている、と回答のそれぞれは、一つの他の質問につながる - そうhieararchyは、バイナリツリーのような一種のように終わるアウトグラフ:

  Question 1 
     /  \ 
    Answer 1  Answer 2 
    /   \ 
Question 2  Question 3 
/  \  /  \ 
Ans3  Ans4  Ans5  Ans6 
... 

だから、平易な英語で、私はそれぞれの質問ことを言うだろうhas manyの回答、それぞれの回答はhas one親の質問とhas one子供の質問です。

通常のhas manyの関係では、私はおそらくちょうどmanyエンドに外部キーを置き、oneの終わりを心配する必要はありません。ここではAnswerquestion_idになりますが、これは一意である必要はありません。

has_oneの関係では、どちらの関係もうまくできているようですが、回答にはすでにquestion_idが含まれています。その質問に多分置く「親」の答えのanswer_idが適切であるが、それは辞書的に強大な混乱を招くようです - 代わりに...

私は直感的にそれがこの質問につながった回答だ理解できないでしょうQuestion.answerのようなものを見て、私ができましたがAnswerのモデルに入っていますが、どちらが「親の質問」で、どちらが「フォローアップの質問」であるかを区別する必要があります...

もう1つの考慮点は、 (答えに基づいて)データベースから「質問」を選択すると、表示可能な回答も得られます。パフォーマンスを最適化することは必須条件ではありませんが、「正しく」(または少なくとも完全に間違っているわけではありません)良いことでしょう。

どのような方法が最適ですか?

+0

各質問には複数の回答があり、それぞれの回答には親の質問が1つあります(アンケートが終わった場合はいいえ)次の質問 – Beth

答えて

0

私の友人の助けを借りて、私が保存しようとしているものの正しい言葉を見つけました。それは決定木です!

https://en.wikipedia.org/wiki/Decision_tree

そして、同様の質問https://stackoverflow.com/a/5278239/1592915に、この答えに答えテーブルが仲介ある質問の間に基​​本的に男対多の関係のアプローチを使用することを提案しています。

+1

あなたは3者関係(船)/協会に興味があります質問Aは質問R "につながる。分解できるかどうかは、「質問」と「回答」が正確に何を意味するかによって異なります。もしQ&Aが*ツリー*内の一意のidsであれば、代わりに "回答Aは質問Qに答えます"と "回答Aが質問Rにつながります"という投影を使うことができます。 PS "Has"は名前として役に立たず、 "related"を意味しますが、* what * relationshipは記述しません。どのような関係があるかを知ると便利です。 FKは法的状況ごとのもう一つの*(メタ)関係/ダグのインスタンス/エッジです。デザインについては忘れてください。 – philipxy

+0

コメントをいただきありがとうございます。非常に限られた使用しかしていないという意味で本当に良い点です! – apprenticeDev

関連する問題