Я просматривал этот сайт для ответа, но я все еще немного не уверен, как спланировать подобную систему в ее структуре и реализации базы данных.
В PHP и MySQL было бы ясно, что некоторые достижения зарабатываются немедленно (когда выполняется специальное действие, в случае SO: заполняются все поля профиля), хотя я знаю, что SO обновляет и назначает значки через определенное время , При таком количестве пользователей и значков это не вызовет проблем с производительностью (с точки зрения масштаба: большое количество пользователей и значков).
Итак, я предполагаю, что структура базы данных будет такой простой:
Badges | Badges_User | User
----------------------------------------------
bd_id | bd_id | user_id
bd_name | user_id | etc
bd_desc | assigned(bool) |
| assigned_at |
Но, как говорили некоторые люди, было бы лучше использовать поэтапный подход, чтобы пользователь, имеющий 1 000 000 постов на форуме, не замедлял работу любой функции.
Тогда это будет другая таблица для значков, которая может быть инкрементной, или просто поле для прогресса в приведенной выше таблице badges_user?
Спасибо за чтение и, пожалуйста, обратите внимание на масштабируемость желаемой системы (например, SO тысяч пользователей и от 20 до 40 значков).
РЕДАКТИРОВАТЬ: к некоторому сглаживанию некоторой путаницы, которую я назначил_at как Дата / Время, критерии для присвоения значка лучше всего поместить в подготовленные запросы / функции для каждого значка, не так ли? (лучшая гибкость)