スタッカーの挨拶、
私は、ユーザーが調査を作成して一般に公開できるようにするアプリケーションに最適なデータベーススキーマを考え出そうとしています。名、姓など、ほとんどの調査(すべてではない)に含まれる「標準」の人口統計フィールドがたくさんあります。もちろん、ユーザーは無制限の数の「カスタム」質問を作成できます。
私が最初に考えたのは次のようなものです。
Survey
ID
SurveyName
SurveyQuestions
SurveyID
Question
Responses
SurveyID
SubmitTime
ResponseAnswers
SurveyID
Question
Answer
しかし、それは私がデータを照会したいときはいつもひどいことになるでしょう。そして、それは危険なほど内部プラットフォーム効果に近いようです
改善点は、応答テーブルに事前に考えられる限り多くのフィールドを含めることです。
Responses
SurveyID
SubmitTime
FirstName
LastName
Birthdate
[...]
そうすれば、少なくともこれらの一般的な列からのデータのクエリは簡単です。たとえば、誕生日を出した調査に回答したすべての人の平均年齢をクエリできます。
しかし、これはコードを少し複雑にするようです。ここで、調査でどの質問が行われるかを確認するには、有効になっている一般的な回答フィールド(Surveyのビットフィールドを使用)とSurveyQuestionsテーブルの内容を確認する必要があります。また、Responsesテーブルの「一般的な」質問と重複する「カスタム」質問を誰かが作成しようとした場合など、特殊なケースについて心配する必要があります。
これは私ができる最善のことですか?私は何かが足りないのですか?