MySQLに生徒の毎日の出席を保存するためのテーブル(attendance_details
)を作成しました。毎日1時間(1〜8時間)attendance
をキャプチャする必要があります。生徒の詳細は別の表(student_details
)にあります。
現在、attendance_details
で作成したフィールドは次のとおりです:attendance_no
(Foreign Key
はPrimary Key
テーブルではstudent_details
です)、date
、hour1
、hour2
、hour3
、hour4
、hour5
、hour6
、hour7
、hour8
。
User
はabsentees
のみをマークし、残りのstudents
はpresent
としてマークする必要があります。
毎月のattendance
のすべてのstudents
の時間に基づいて、毎日class
のレポートを取得したいので、これは良いデザインですか?フロントエンドはC#
で開発されています。
また、毎時間attendance
を追跡する必要があります。
以下のようにレポートを生成するSELECT
クエリについて教えてください。
MySQLデータベースのフィールドを以下の図に示します。
OPは、データベースにデータを保存する方法と、教室に出席する際のデータの表示方法や入力方法を融合しているようです。
これらは必ずしも同じものではありません。ディスプレイはストレージを駆動するべきではありません。
UIは、OPが上記のように教室の出席フォームにデータを表示し、これらの値をデータベース内のより正規化されたテーブルとの間でマッピングする中間層を備えることができます。
中間層ではより多くの作業が必要ですが、
(1) the attendance day is longer or shorter
(2) students are added or removed from the class
CLASS_ATTENDANCEテーブルのエントリには、クラス、学生、およびステータスの外部キーを使用して毎日変化するすべてのデータが含まれます。
(0) CLASS_ATTENDANCE ID
(1) CLASS ID
(2) STUDENT ID
(3) DATE
(4) STATUS CODE
(5) and perhaps TEACHER ID of the person who took attendance
CLASSテーブルのエントリは
(0) CLASS ID
(1) COURSE ID
(2) PERIOD ID
(3) and perhaps TEACHER ID of the person who normally teaches the class
PERIODテーブルのエントリには
(0) PERIOD ID
(1) START TIME (for example 08:00)
(2) END TIME (for example 08:55)
通常、1学期中に期間は変更されません。
どの生徒がどのクラスに割り当てられているかを追跡し、CLASS_ATTENDANCEテーブルへの入力を毎日行うCLASS_STUDENTテーブルが必要です。
(0) CLASS_STUDENT ID
(1) CLASS ID
(2) STUDENT ID
これは、データを正規化するための1つの方法にすぎません。また、CLASS_STUDENTテーブルとCLASS_ATTENDANCEテーブルの間には、依然として冗長性があります。
はい、このデザインは貧弱です。あと1時間追加することを想像してみてください。
これはより良いアプローチです:
Students(**StudentID**, LastName, ...[other Student Details])
Courses(**CouseID**, Description, ...[any other Course Specific Stuff])
または彼らが参加するあらゆるものに。常に1つしかないことを確認できる場合は、これをスキップできます
可能であれば、毎週適用される時刻表のようなものを用意してください。また、コースが毎週月曜日に5回目のレッスンが行われるように、コースとレッスンを一致させるテーブルを作成することもできます。
あなたはそれについて何の情報も与えないので、これは扱いにくい部分ですが、ドイツ語では、いくつかのタイムスタンプで学生とレッスンを一致させることは悪いでしょう。これを検証できないからです。あなたの場合、1日あたり8レッスン(就業日のみ?)がありますが、この設計では、必要に応じて9番目のレッスンを追加できます。
Lessons(**LessonID**, StartTime, EndTime, Weekday)
コア部分:
Attendances(Stunden[FK], Course[FK], Lesson[FK], Date)
日付は重要です。次の10年間に可能なすべてのレッスンのリストを取得したくない場合は、.
また、出席または未出席の情報を保存しないでください。 「デフォルト」の状態(出席していない)があり、学生、一部のレッスン、および出席表にあるコースのマッピングがない場合、彼は出席しませんでした。
次のような情報を追加したい場合
出席表に整数/バイトを追加します。