配列をmysqlに格納することに関して、ここや他の場所で多くの強力なステートメントを読みました。正規化のルールは、その悪い考えを示唆しているようであり、格納された配列内を検索すると、エレガントでないコードが助長されます。ただし、私が取り組んでいるアプリケーションの場合、フィールドに配列を格納することは合理的な解決策のようです。それは誰もがこの立場で間違って考えていることだと確信していますが、私はより良い方法を理解することはできません。設定は次のとおりです。
登録済みの学生、受講できるコース、および各コースでのパフォーマンスを保存する一連のテーブルがあります。重複やエラーを避けるために、すべてが「正規化」されています。「myCourses」セクションを生成できるようにしたいので、ログイン後、学生は資格のあるコースと受講したコースを確認できますが、自由に確認できます。頭に浮かぶアプローチは2つの配列です。my_eligible_coursesおよびmy_completed_courses。登録時に、学生には資格のある一連のコースが与えられます。これは、受講できるコースごとに1つずつ、studentidが複数出現する行として保存できます。
学生1コース1学生1コース2学生1コースn
次に、テーブルは、学生1の対象となるすべてのコースについて照会され、学生がログインしたときにリストとして表示されます。
または、studentidを主キーにし、「eligible_courses」列に配列(コース1、コース2、コースn)を含めることもできます。
受講したすべてのコースと生徒の成績に関連する指標を記録するための、生徒の成績の表があります。生徒の成績やコースの質などについて報告するように求められますが、この表はかなり大きくなります。my_completed_coursesのリストを生成する最も効率的な方法は、ログインするたびに学生IDでこのテーブルをクエリして、完了したコースのリストを提供することだとは信じられません。
もう1つの厄介な問題は、学生が適格なコースのセットは可変であり、新しいコースが開発されるにつれて拡大することです。これは、新しいコースごとに新しい列のセットを生成することは悪い考えであることを示唆しているようです。たとえば、newcourse_name 、pretest_score、posttest_score、time_to_complete、...また、新しい各コースのテーブルは、単純なリストのセットを生成するという比較的ありふれたエンドポイントの複雑なソリューションのように見えます。
それで、質問を言い換えると、登録された学生テーブルに適格で完了したコースの「不法な」配列リストを保存するか、これらのリストを動的に生成する方が良いでしょうか?
これはまだあいまいすぎると思いますが、エレガントでない配列と再構築されたスキーマの例を示すデータベース設計についての議論をいただければ幸いです。