Система достижений / значков
Я просматривал этот сайт в поисках ответа, но все еще немного не уверен, как спланировать подобную систему в ее структуре и реализации базы данных.
В 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 в качестве даты / времени, критерии для присвоения значка лучше всего поместить в подготовленные запросы / функции для каждого значка, не так ли? (лучшая гибкость)