Таблица базы данных для оценок - PullRequest
1 голос
/ 31 октября 2008

Я пытаюсь определить таблицу для хранения оценок учеников для онлайн-табеля. Я не могу решить, как это сделать.

Оценки выставляются по предметам в триместровом периоде. Каждый триместр имеет среднюю оценку, общее количество пропущенных занятий и «восстанавливающуюся оценку» (я не знаю правильного термина в английском языке, но это дополнительный тест, который вы берете, чтобы попытаться поднять свою оценку, если вы ниже среднего) Я также должен хранить средний год и окончательный "выздоровление". По сути, это так:

      |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

Я мог бы хранить эту информацию в одной строке БД, с каждой строкой, подобной этой:

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

И так далее, но я подумал, что это будет трудно поддерживать, если школьник когда-нибудь решит выставить оценку по биместру или какому-то другому периоду (как это было до 3 лет назад).
Я мог бы также обобщить поля таблицы и использовать tinyint для пометки, для какого триместра эти оценки являются, или если они являются финалами года. Но для этого нужно было бы написать множество подзапросов, чтобы написать табель успеваемости.

Что из двух лучше или есть какой-то другой способ? Спасибо

Ответы [ 4 ]

6 голосов
/ 31 октября 2008

Вы можете попробовать структурировать это так со своими таблицами. У меня не было всей информации, поэтому я догадался, что вам может понадобиться, или со всем этим справится.

TimePeriods:

  • ID (INT)
  • PeriodTimeStart (DateTime)
  • PeriodTimeEnd (DateTime)
  • Имя (VARCHAR (50)

Студенты:

  • ID (INT)
  • FirstName (УАКСНАК (60))
  • День рождения (DateTime)
  • [любая другая соответствующая студенческая область информация добавлена ​​... как контакт информация и т. д.]

Сортировка:

  • ID (INT) * * 1 032
  • StudentID (INT)
  • GradeValue (поплавок)
  • TimePeriodID (INT)
  • IsRecoveringGrade (булево)

MissedClasses:

  • ID (INT)
  • StudentID (INT)
  • TimePeriodID (INT)
  • DateMissed (DateTime)

Классы:

  • ID (INT)
  • ClassName (VARCHAR (50))
  • ClassDescription (TEXT)
0 голосов
/ 31 октября 2008

Это приходит на ум.

(А если серьезно, то это ошибка из-за слишком большого количества столов, а не из-за небольшого количества. У Handruin есть лучшее решение, которое я пока вижу).

0 голосов
/ 31 октября 2008

Лучше иметь вторую таблицу, представляющую триместр, и иметь ссылку внешнего ключа на триместр из таблицы оценок (и хранить отдельные оценки в таблице оценок). Затем выполните усреднение, пропущенные классы и т. Д., Используя функции SQL SUM и AVG.

0 голосов
/ 31 октября 2008

Я думаю, что лучшее решение - хранить одну строку за период. Таким образом, у вас будет таблица как:

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

Так что, если это 2 семестра, у вас были бы периоды 1 и 2. Я бы предложил использовать период 0, чтобы означать "общий за год".

...