あなたが同時に多くのことに苦労していることは知っていますが、最良の答えは ikegamiすぐに合格 Perlでそれを行う途中で:
多くの場合、データベースで正しいことを行うことを学ぶことはないため、アプリケーションレベルで必要以上のことを行います(たとえば、その他の質問 これは、Perlの代わりに適切なSQLクエリによってより適切に答えられます)。しかし、余談ですが、スキーマを変更できないため、多くの人がそうしています。ビールの適切な使用などのソーシャルヒューリスティックは、そのパスをスムーズにすることがあります。データベースの人々を説得する小さな仕事は、後で倍数で報われます。また、別のこととして、「フルスタック開発者」はデータベースの高度な使用を省略していることがよくあります。
C.J.DateのDatabasein Depthを誰にも読ませるつもりはありません 、しかし、スキーマを正しくすることには多くの価値があります。確かに、私はそれがその使用に最小限の労力と複雑さを課すことを意味します。物事は簡単である必要があり、アプリケーションレベルでこれらを再配置する必要はありません。
各回答が選択された回数を数えたいと思います。カウントはデータベースが非常にうまく機能するものなので、データベースに実行させてください。
いくつか質問があります。質問にはさまざまな答えがあります。調査では、一連の質問がグループ化されます。人々は、回答を質問に関連付けることで調査に回答します。
これが単純なスキーマ設計です(そして、データベースの人がやがて現れて、私が正しくやらなかったと私に言うでしょうが、それは問題ありません)。秘訣は、未使用の複数の列を持つ必要がないことです。すべてがきちんとした小さなパッケージ(「リレーショナルデータベース」の「関係」)で提供され、「外部キー」(たとえば、質問への回答をマップするためのquestion_id)を介して他のものに簡単に接続できます。たとえば、回答には同じquestion_id
に対して複数の行があります 。
誰かが派手なモデリングツールを使って写真を作りたいのなら、それを選んでください。これをコミュニティウィキとしてマークしています。
Table: Questions
id
text
Table: Answers
id
text
question_id
Table: Surveys
id
title
Table: SurveyQuestionSet
id
survey_id
question_id
Table: Respondent
id
text
Table: Response
id
respondent_id
survey_id
question_id
answer_id
マップされ、適切に正規化されたら(通常のフォーム を読んでください )、SELECTを使用して必要なデータを取得するのは非常に簡単です。正規化の理想は、単に情報を繰り返さないこと、または情報が一貫性のない状態にならないようにすることです。これらの形式では、多くのことがはるかに簡単になります。
そして、そのようなことを練習したい場合は、 Stackoverflow Data Explorer は、ここで提示したものに正規化された実際のデータセットです。
これで、answer_id
の回数を数えるだけです。 調査と質問の特定の組み合わせに対して表示されます。 GROUP BY
の巧妙な使用 あなたのためにすべての仕事をします。数十の未使用の列を調べて、それらをカウントする方法を見つけようとして、行を繰り返す必要がなくなりました。それだけでなく、これらのものをビュー
にすることができます。 、つまり、クエリを1回作成すると、データベースはその結果がテーブルであるかのように見せかけます。次に、ビューをクエリするだけです(つまり、すべてのJOIN
sと同様に隠されています)、これは非常に簡単です。ストアドプロシージャも見落とされがちです。