@otachkin
Программист php

Как лучше хранить историю начисления баллов в сервисе обучения?

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

Вопрос состоит в том, как лучше хранить историю начисления баллов.

Я думаю создать таблицу scores со следующими полями:
id;
user_id;
table_name (для хранения имени таблицы, например lessons, чтобы понимать, за что именно начислены балы);
element_id (id записи в таблице table_name );
scores (количество балов);
date_create (дата и время начисления очков

В дальнейшем если надо будет вывести все количество балов, буду делать запрос суммы по полю scores, а если понадобится история начисления баллов, то с помощью JOIN сделаю несколько запросов и выведу историю.

Подскажите, подходит ли данный алгоритм решения вопроса, или есть более грамотное решение?
  • Вопрос задан
  • 2298 просмотров
Пригласить эксперта
Ответы на вопрос 2
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Лучше всего хранить в 2х таблицах:
1) количество балов в настоящий момент - можно хранить полем в таблице users например
2) таблица истории транзакций (начислений/списаний) -
transaction_id
user_id
scores
date_create
...какие то поля обоснования за что, итд...
Ответ написан
Комментировать
Kwisatz
@Kwisatz
Больше web-приложений, хороших и разных
Я бы рекомендовал во первых ввести заголовок. Скажем история выглядит примерно так

25.02.2015 Начислено 50 баллов за взрыв вертолета
То полностью сохраняем заголовок (можно параметризованный). История возможно многим захочется посмотреть, а вот перейти на ссылающийся объект куда меньшему числу,

Очки я бы суммировал в отдельной таблице в профиле пользователя, лучше потратить лишнее время при инсерте, чем 100500 раз суммировать.

Ну и в принципе можно еще извернутся и сделать основную таблицу, и ее потомков под каждый table_name.
Тогда можно сделать скажем insert into scores_by_lessons, select * from scores by_lessons
ну и в любой момент select * from scores для общего журнала. Тут уже вопрос предпочтений)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽