Я бы определенно выбрал реляционную базу данных вместо базы данных nosql для этого подхода.
Первое, что вам нужно, это базовая структура значка.
ID (int)
Title (Varchar 255)
Image (Varchar 255) - would hold location to image
Points (int)
Затем вам понадобитсяхранить все значки, которые заработал пользователь.Итак, в разделе пользователей:
Badges (Varchar) - holds a serialized array of badge IDs
Badge_count (int) - So you can get the total without parsing through Badges.
Point_count (int)
Теперь вы говорите, что не можете запрашивать все значки для каждого выполненного действия, поэтому вам также следует сохранить запись для каждого действия.Скажем, например, в вашей таблице «сообщений»:
Possible_badges (Varchar 255) - serialized array of Badge ID's
Затем вы можете нормализовать и дать только значки, связанные с какой-либо конкретной задачей, для вашего механизма правил.
Ваша лучшая ставка - просточтобы начать играть с ними, если вы не понимаете, что там происходит, вы должны пойти на компромисс и пойти на основную логику, поэтому присуждайте только значки за задачи, которые могут быть измерены записями базы данных (в основном числовые данные).Или потратьте больше времени на обучение (и вырывание волос).