1

オンライン成績表の学生の成績を格納するテーブルを定義しようとしています。やり方が決まらないけど。

成績は、三半期の科目ごとに与えられます。学期ごとに、平均成績、欠席した授業の合計数、および「回復成績」があります (英語での適切な用語はわかりませんが、平均を下回っている場合に成績を上げようとする追加のテストです)。 、 年間平均と最終的な「回復成績」も保存する必要があります。基本的には、次のようになります。

      |1st Trimester      |2nd Trimester      |3rd Trimester
Subj. |Avg.  |Mis.  |Rec  |Avg.  |Mis.  |Rec  |Avg.  |Mis.  |Rec  |Year Avg.  |Final Rec.
Math  |5.33  |1     |4    |8.0   |0           |7.0   |2           |6.5        |7.0
Sci.  |5.33  |1     |4    |8.0   |0           |7.0   |2           |6.5        |7.0

この情報を 1 つの DB 行に格納できます。各行は次のようになります。

1tAverage | 1tMissedClasses | 1tRecoveringGrade | 2tAverage | 2tMissedClasses | 2tRecoveringGrade

などなど、しかし、学校がバイメスターまたは他の期間(3年前まではそうであったように)で評価することを決定した場合、これを維持するのは面倒だと思いました。
また、テーブル フィールドを一般化して、tinyint を使用して、それらの学年がどの学期であるか、または年度末であるかどうかをフラグ付けすることもできます。しかし、これはレポートカードを書くために多くのサブクエリを要求し、管理するのも大変です。

どちらが良いですか、それとも他に方法はありますか?ありがとう

4

4 に答える 4

5

テーブルでこのように構造化してみることができます。私はすべての情報を持っていなかったので、あなたが何を必要とするか、またはそれで何をするかを推測しました.

期間:

  • ID(整数)
  • PeriodTimeStart(日時)
  • PeriodTimeEnd(日時)
  • 名前(VARCHAR(50)

学生:

  • ID(整数)
  • 名(VARCHAR(60))
  • 姓(VARCHAR(60))
  • 誕生日(日時)
  • [その他の関連する学生分野の情報が追加されました...連絡先情報など]

グレーディング:

  • ID(整数)
  • 学籍番号(INT)
  • GradeValue(浮動小数点数)
  • TimePeriodID(INT)
  • IsRecoveringGrade(ブール値)

欠席クラス:

  • ID(整数)
  • 学籍番号(INT)
  • クラスID(INT)
  • TimePeriodID(INT)
  • DateMissed(日時)

クラス:

  • ID(整数)
  • クラス名 (VARCHAR(50))
  • クラスの説明 (テキスト)
于 2008-10-31T17:45:11.667 に答える
0

これが頭に浮かぶ。

(しかし、真剣に、少なすぎるのではなく、多すぎるテーブルの側で誤りを犯します。Handruinは私がこれまでに見た最良の解決策を持っています)。

于 2008-10-31T17:46:52.223 に答える
0

最善の解決策は、期間ごとに 1 つの行を格納することだと思います。したがって、次のようなテーブルがあります。

grades
------
studentID
periodNumber
averageGrade
missedClasses
recoveringGrade

したがって、2 学期の場合、ピリオド 1 と 2 があります。ピリオド 0 を使用して、「年間全体」を意味することをお勧めします。

于 2008-10-31T17:30:04.880 に答える
0

学期を表す 2 番目のテーブルを用意し、学年テーブルから学期への外部キー参照を設定する (および学年テーブルに個々の学年を保存する) ことをお勧めします。次に、SQL 関数 SUM および AVG を使用して、平均や欠席したクラスなどを実行します。

于 2008-10-31T17:32:49.350 に答える