Нужна консультация по разработке базы данных для школьной системы оценок - PullRequest
0 голосов
/ 12 марта 2012

Я работаю в школе K-12 и разрабатываю систему зачетных книжек.Существующая система дневников, которую мы используем, и которую я также разработал, основана на Excel с VBA.Для меня всегда кошмарно объединять 400+ книг Excel в конце каждого семестра.Во время летнего перерыва я планирую поместить все данные в базу данных для удобства управления и прочее.

Моя проблема заключается в следующем:

Для приложения с интенсивными вычислениями, такого как журнал успеваемости,хорошо хранить вычисления в поле таблицы или лучше хранить ТОЛЬКО необработанные данные и выполнять вычисления только на внешнем интерфейсе?

Принцип работы системы зачетных книжек Excel такой ...

  • Учитель записывает каждый балл для каждой оценки каждого ученика в форме балла / максимально возможного балла.(например, Тест 1 = 5/10, Домашняя работа 1 = 20/25 и т. д. )
  • Баллы будут рассчитываться в процентах и ​​суммироваться по компонентам.«Компонент» означает «Викторина», «Домашняя работа» и т. Д. Таким образом, будет что-то вроде « Средний уровень экзаменов = 90%,« Среднее домашнее задание »= 80% и т. Д.» »
  • У разных предметов будут разные финалыразбивка по оценкам: " Наука = 50% тестов + 50% домашних заданий, математика = 60% тестов + 40% домашних заданий ".
  • Затем общая средняя оценка каждого учащегося рассчитывается путем получения среднего значения по всем предметам.

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

На данный момент, я думаю что-то вроде таблицы, в которой все оценки записываются так:

tbl_scores
    id
    student_id
    term_id
    subject_id
    component_id
    assessment_id
    raw_score
    highest_possible_score    #not sure about this cause this can be implied from assessment_id

Было бы полезносохранить вычисления (процент для каждой записи оценки, среднее по компоненту, среднее по предмету, общее среднее и т. д. в базе данных) и использовать хранимые процедуры и триггеры для их обновления при появлении нового результата?

ИлиЛучше просто хранить исходные результаты и рассчитывать все ТОЛЬКО на интерфейсе?Будет ли эта опция быстрее первой, зная, что запросы SELECT здесь действительно будут более сложными из-за подзапросов?

Кстати, я планирую использовать для этого PostgreSQL.

Заранее благодарен за любой совет.

DashMug

Ответы [ 2 ]

1 голос
/ 12 марта 2012

400 студентов, то есть арахис для СУБД, предназначенной для обработки миллионов записей.Вам не нужно беспокоиться о производительности.

В вашем описании я не видел ничего такого, что PostgreSQL не мог бы делать в простых запросах.Храните только необходимую информацию и рассчитывайте остальное.Кроме того, не добавьте избыточный столбец highest_possible_score в свою таблицу tbl_scores, если эта информация уже есть в связанной таблице assessment.Это принесет больше вреда, чем пользы.

Если (и только если) вы позже обнаружите, что запрос слишком медленный, вы всегда можете использовать материализованные представления (записать выходные данные запроса в таблицу, пересчитать этотаблица после изменений в базе данных.)

0 голосов
/ 12 марта 2012

Денормализация зависит от общего количества записей. Я думаю, что для школы это было бы не так уж и сложно, лучше принять решение объединить данные с запросами (да, это будет сложнее, некоторые объединения появятся, это нормально)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...