あなたのコメントから、Person
はこのシステムに関係している人に関する一般的な情報を表します。生徒、教師、その他の学校の従業員。 Person
にある情報は、Student
(名前、住所、DOB)で繰り返す必要はありません。
生徒の現在の学年/クラス(幼稚園から高校)をStudent
に追加します。それをStudentClass
と呼びましょう。後で使用します。
また、MarkType
およびMark
を使用するには、中間テーブルが必要になる場合があります。 (出力のヘッダーに示されているように)各アイテムの利用可能な合計ポイントを示すために何かが必要だと思います。 MarkType
はそのままで意味があります。特定の試験、クイズ、宿題などを示すテーブルとしてMark
を用意します。したがって、次のものが必要です。
MarkID
(主キー)MarkType
SubjectId
MarkValue
-この特定のアイテムに値するポイント(たとえば、10ポイント)。次に、StudentMarks
を取得します。
StudentMarkId
(主キー)MarkId
StudentId
Mark
-この生徒がこの特定のアイテムで獲得したポイント(たとえば、1人の生徒が10点のうち9点を獲得し、他の生徒は5点しか獲得しない場合があります)。私はまた、Term
とSubject
を分離する傾向があります。同様に、インストラクターが異なれば、割り当ての組み合わせも異なり、特定の割り当てに別のインストラクターとは異なる値を割り当てることができます。 2つの新しいテーブルを作成します。
Instructor
:-InstructorId
(主キー)-PersonID
(Person
への外部キー。名前、アドレス、DOBはここにあります)-...(特定のインストラクターに固有のその他の情報、彼らが教えている主題、または彼らが教えている期間/年に関係なく)
Course
:-CourseId
(主キー)-SubjectId
-TermId
-InstructorId
TermId
はSubject
から削除され、CourseId
はSubjectId
のMark
を置き換えます。
別のメモ:学生をコースに具体的に結び付けることは意味があるかもしれません。それを呼び出すことができます...
CourseRoster
:-StudentCourseId
(主キー)-StudentId
-CourseId
-StudentCurrentClass
(StudentClass
の値この学生がこのクラスにいた時間)。
その場合、StudentId
をStudentCourseId
のStudentMarks
に置き換えます。
これにより、特定のコースの特定の学生がマークしていない試験/クイズ/課題があったかどうかを特定することもできます。
更新:あなたのコメントに基づいて、生徒の現在の「クラス」(Kから高校まで)、および特定のコースを受講したときのクラスを追跡するためのフィールドをいくつか追加しました。ハードコードされた値で構成されます(米国では、幼稚園に加えて大学入学前の12年間の教育があるため、「K」と「1」-「12」はここで機能します)、Class
テーブルは実際には何らかの理由で明示的なクラスを確立する必要がある場合でも、Class
テーブルが必要になります。私はそれを逆にします-1つのクラスに複数の学生がいるので、ClassID
をStudent
テーブルに入れます。注:各Class
を特定のTerm
に関連付けることも検討してください。