調査データベーススキーマ。
これは数千人によって行われた真の古典です。最初は常に「かなりシンプル」に見えますが、実際にはかなり複雑です。Railsでこれを行うには、添付の図に示すモデルを使用します。かなり複雑に思えるかもしれませんが、これらのいくつかを長年にわたって構築すると、ほとんどの設計決定は非常に古典的なパターンであり、最初。
以下の詳細:
キーテーブルのテーブル詳細
答える
答えは、それがユーザーによる実際の応答をキャプチャするように、テーブルは非常に重要です。あなたは質問ではなくquestion_optionsへのリンクに答えていることに気付くでしょう。これは意図的なものです。
input_types
input_typesは質問のタイプです。各質問は1種類のみです。たとえば、すべてのラジオダイヤル、すべてのテキストフィールドなどです。たとえば、5つのラジオダイヤルと「含める?」の1つのチェックボックスがある場合は追加の質問を使用します オプションまたはそのような組み合わせ。ユーザービューの2つの質問に1つのラベルを付けますが、内部的には、ラジオダイヤル用とチェックボックス用の2つの質問があります。この場合、チェックボックスには1のグループがあります。
option_groups
option_groupsおよびoption_choicesを使用すると、「共通」グループを構築できます。一例として、不動産アプリケーションでは、「資産は何歳ですか?」という質問があります。回答は、1-5 6-10 10-25 25-100 100+の範囲で必要になる場合があります
次に、たとえば、隣接するプロパティの年齢について質問がある場合、調査は上記の範囲を「再利用」して、同じoption_groupとoptionsが使用されるようにします。
測定単位
units_of_measureはそのとおりです。インチ、カップ、ピクセル、レンガなど何でも、ここで一度定義できます。
参考までに、本質的に汎用ですが、この上にアプリケーションを作成できます。このスキーマは、各テーブルの主キーに「id」などの規則があるRuby On Railsフレームワークに適しています。また、関係は単純なone_to_manyであり、many_to_manyまたはhas_manyスルーは必要ありません。私はおそらくhas_many:throughsおよび/または:delegatesを追加しますが、個々の回答からsurvey_nameのようなものを.multiple.chainingなしで簡単に取得できます。