Лучший подход к разработке структуры для системы присвоения значков - PullRequest
7 голосов
/ 02 февраля 2012

В настоящее время я разрабатываю один образовательный сайт.

Для этого нам нужно назначить пользователю несколько значков в зависимости от их активности (например, stackoverflow).

Я искал рамки для этого. У кого-нибудь есть идеи, как это можно сделать? Дизайн стола и т. Д.

Проблемы, с которыми я мог бы подумать:

  1. У нас может быть большое количество значков, поэтому при каждом действии пользователя мы не можем проверять все значки и проверять, можно ли назначить какой-либо значок
  2. Добавляя новый значок и критерии для этого, я не хочу изменять существующий код для обработки этого (может у нас есть какое-то общее решение?)
  3. Какой БД я должен выбрать (скажем, если мой фреймворк подобен, он вызывает событие, когда критерии для одного значка удовлетворяют, и эти правила создаются в БД (например, sql). Или я могу перейти на nosql db (например, mongodb как мой остальной проект находится в mongodb)

Мой первоначальный поиск дал мне следующие вещи

  1. обработчик правил -> приведет к очень утомительной задаче Архитектура базы данных для системы "Badge" и произвольные критерии (MySQL / PHP)
  2. Один проект -> http://drupal.org/project/user_badges (не в состоянии правильно его понять)
  3. люди говорят, что ваша структура таблицы должна быть такой-то и такой-то .. и все .. Лучший способ хранения критериев Badge? Создание «значков» для моего сайта, лучший способ хранения пользовательских значков? Использование PHP

1 Ответ

1 голос
/ 02 февраля 2012

Я бы определенно выбрал реляционную базу данных вместо базы данных 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

Затем вы можете нормализовать и дать только значки, связанные с какой-либо конкретной задачей, для вашего механизма правил.

Ваша лучшая ставка - просточтобы начать играть с ними, если вы не понимаете, что там происходит, вы должны пойти на компромисс и пойти на основную логику, поэтому присуждайте только значки за задачи, которые могут быть измерены записями базы данных (в основном числовые данные).Или потратьте больше времени на обучение (и вырывание волос).

...