web-dev-qa-db-ja.com

毎日1時間ごとの学生出席のテーブルデザイン

MySQLに生徒の毎日の出席を保存するためのテーブル(attendance_details)を作成しました。毎日1時間(1〜8時間)attendanceをキャプチャする必要があります。生徒の詳細は別の表(student_details)にあります。

現在、attendance_detailsで作成したフィールドは次のとおりです:attendance_noForeign KeyPrimary Keyテーブルではstudent_detailsです)、datehour1hour2hour3hour4hour5hour6hour7hour8

Userabsenteesのみをマークし、残りのstudentspresentとしてマークする必要があります。

毎月のattendanceのすべてのstudentsの時間に基づいて、毎日classのレポートを取得したいので、これは良いデザインですか?フロントエンドはC#で開発されています。

また、毎時間attendanceを追跡する必要があります。

以下のようにレポートを生成するSELECTクエリについて教えてください。

enter image description here

MySQLデータベースのフィールドを以下の図に示します。

enter image description here

1
Acube

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
Rick Ryker

はい、このデザインは貧弱です。あと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年間に可能なすべてのレッスンのリストを取得したくない場合は、.

また、出席または未出席の情報を保存しないでください。 「デフォルト」の状態(出席していない)があり、学生、一部のレッスン、および出席表にあるコースのマッピングがない場合、彼は出席しませんでした。

次のような情報を追加したい場合

  • 出席した
  • 言い訳に出席しなかった
  • 弁解せずに出席しなかった

出席表に整数/バイトを追加します。

0
xuma202