0

データベースの経験はあまりありませんが、少し問題があります。学生と講師が受講しているコースを保存するデータベースを作成しようとしているので、3 つのテーブルを作成しました。講師テーブルと受講生テーブルでは、フィールド コースは、講師または受講生のいずれかが受講したコースのコンマ区切りのリストを表します。

このようなもの:

講師 - コース - "1,2"

学生 - コース - "1,2,3"

コース - 1 - 「バイオ」

ただし、問題は、コースに基づいて学生のリストを表示する場合、すべての学生とコースを検索し、もう一度検索して、csv リストに指定されたコースがあるかどうかを確認する必要があることです (これは少し冗長に思えます)。インデックスなどを関連付け/参照することで、この目標を達成できる別の方法はありますか? ありがとう

4

3 に答える 3

4

2 つの新しいテーブルを作成します。

student_courses(int student_id, int course_id)
lecturer_courses(int lecturer_id, int course_id)

コースの受講とは別にコースの提供を追跡することを想定して、学生が受講しているコースごと、および講師が教えているコースごとに個別の行を作成できるようになりました。コース関連の分析を行う場合は、コース ID を使用してこれらのテーブルに対してクエリを作成できます。

于 2012-05-14T16:53:32.857 に答える
4

フィールドコースは、講師または学生が受講したコースのカンマ区切りのリストを表します

を含むフィールドは、第 1 正規形 (1NF)csv listを破っており、パフォーマンスを含むあらゆる種類の問題を抱えています。このフィールドを別のジャンクション テーブルに分割する必要があります。{StudentID, CourseID}

于 2012-05-14T16:47:48.030 に答える
2

"1,2,3" のようなテキストを格納する代わりに、いくつかの行を格納します。

  • 「students」という名前のテーブル内のすべての学生に対して 1 行
  • "courses" という名前のテーブルのすべてのコースに対して 1 行

次に、組み合わせごとに 1 つの行を持つ「student_in_course」という名前の別のテーブルを作成します。

次に、「lecturer_in_course」についても同じことを行います。

于 2012-05-14T16:48:41.503 に答える