2017-03-23 9 views
0

私はアンケートのプラットフォームであるAPIを通じて収集されたアンケート回答を保存するデータベースを設計しています。各調査には異なる数の質問があります。各調査にはIdがあり、それぞれの回答にはIdもあります。私は、データを効率的に保存したいが、クエリを使って同時に複数の質問を取得するのに十分柔軟である。調査回答をMySQLに保存する最良の方法は何ですか?

1つのオプションは、Survey_Id、Response_Id、Question、およびResponseの列を持つテーブルとして格納することです。つまり、APIからの応答の各行は、単一のテーブル内の多くの行になります。

もう1つのオプションは、質問と回答という2つのテーブルを持つことです。各テーブルには、Q1、Q2、Q3、Q4などの約50個の列があります。次に、すべての質問を1回質問テーブルに格納し、応答ごとに同じ順序で応答テーブルに値を格納しますQ1、Q2、Q3などを取得する。私は質問テーブルの値を、レスポンステーブルを読むときにカラム名のエイリアスとして使用できます。

レポートのためにデータを使用する場合は、上記のオプションのうちどれを選択し、おそらく潜在的な問題を予測しますか?あるいは、アンケート回答を保存する他の方法はありますか?

+1

類似したもの: http:// stackoverflow。com/questions/1764435 /データベース設計のための調査/ 1764901#1764901 –

答えて

0

正規化は、データベース設計に最適なアプローチです。

あなたの2番目のオプションは良いですが、さらに改善します。 2つのテーブルquestionsresponsesを更新してください。

質問テーブルスキーマ

質問

応答テーブルスキーマ

をquestion_id survey_id

(質問表にsurvey_idへの参照)

question_id (参照は質問表にquestion_idする)

応答

のは、調査をしましょうをsurvey_id RESPONSE_ID 1 20の質問があります。したがって、questionsテーブルには20エントリがあります。各質問については、responseテーブルに回答があります。

もう一つのヒントとして、巨大な返信や大きなデータセットが必要な場合は、自動インクリメントのプライマリキーを使用しないようにしてください。これにより、私はテーブルに2つの参照survey_idquestion_idを保持しています。

希望すると便利です。

+0

あなたのソリューションは私のオプション#1に近いです。実際には、Entry IdはAPIによって返され、実際には調査中の一連の応答です。とにかく、アンケートのために、どのような2つか3つの質問(1つの列につき1つの質問)についてすべての回答を返すことができるように、テーブルをどのように照会しますか? –

+0

あなたは 'GROUP_BY survey_id question_id'と' SELECT'文中の 'GROUP_CONCAT'レスポンスを使って、1つの質問に対するすべての回答を得ることができます。 – Samir

関連する問題