Я разрабатываю систему вознаграждения для нашей VLE, в которой используются три отдельные технологии - JavaScript для большей части клиентской / отображаемой обработки, PHP для связи с базой данных и MySQL для сама база данных.
Я приложил три скриншота моей таблицы «транзакций». Его структура, несколько примеров записей и обзор его деталей.
Предполагается, что сотрудники начисляют баллы студентам за хорошее поведение и т. Д. Это может означать, что классы из 30 студентов получают баллы одновременно. Персонал имеет ограничение в 300 баллов в неделю, и в настоящее время к системе имеют доступ около 85 сотрудников (эта цифра может возрасти).
Как я это делаю сейчас, каждая «транзакция» имеет «Giver_ID» (член персонала, начисляющий баллы), «Recipient_ID» (студент, получающий баллы), категорию и причину. Таким образом, каждый раз, когда сотрудник выставляет 30 баллов, я помещаю 30 строк в базу данных.
Поначалу казалось, что это сработало, но в течение трех недель у меня уже было более 12 000 транзакций в базе данных.
На этом этапе все становится немного сложнее. На странице «Назначение баллов» (еще один снимок экрана прилагается), когда учитель нажимает на один из своих классов или ищет отдельного учащегося, я хочу, чтобы отображались баллы учащихся.Единственный способ, которым я сейчас могу это сделать в своей системе, - это выполнить « SELECT * FROM 'transaction'
» и поместить всю информацию в массив, используя следующий JS:
var Points = { "Recipient_ID" : "0", "Points" : "0" };
function getPoints (data) {
for (var i = 0; i < data.length; i++) {
if (Points[data[i].Recipient_ID]) {
Points[data[i].Recipient_ID] = parseInt(Points[data[i].Recipient_ID]) + parseInt(data[i].Points);
} else {
Points[data[i].Recipient_ID] = data[i].Points;
}
}
}
При входе в систему внутренне система, похоже, работает достаточно быстро. Однако при внешнем входе этот процесс занимает около 20 секунд и, следовательно, не отображает значения баллов учащихся, пока вы не нажмете / не выполните поиск несколько раз.
Я использую следующий код в моем PHP для доступа к этим транзакциям:
function getTotalPoints() {
$sql = "SELECT *
FROM `transactions`";
$res = mysql_query($sql);
$rows = array();
while($r = mysql_fetch_assoc($res)) {
$rows[] = $r;
}
if ($rows) {
return $rows;
} else {
$err = Array("err_id" => 1);
return $err;
}
}
Итак, мой вопрос: как мне на самом деле подойти к этому? Полнотекстовые индексы; может быть, таблица студентов с их общими баллами, которая обновляется каждый раз при вводе транзакции; массовые транзакции (то есть более одного студента, получающего одинаковые баллы в одной и той же категории) сгруппированы в одну строку базы данных? Это все, о чем я думал, но мне бы хотелось, чтобы кто-нибудь с большим знанием БД, чем я, обеспечил просветление.
Примеры записей
Структура таблицы
Обзор таблицы
Интерфейс назначения точек
Заранее большое спасибо.