Алгоритм / дизайн системы динамических достижений - PullRequest
0 голосов
/ 19 декабря 2018

Я занимаюсь разработкой этой Системы достижений, и она должна иметь CRUD, который позволяет администраторам создавать новые достижения и правила.Мне нужна некоторая помощь с дизайном и алгоритмом этого, чтобы он мог легко развиваться с новыми правилами, как просят администраторы.

Пример правил

Медаль один : должен завершить 5 любойкурсы с оценкой не менее 90
медаль два : должны пройти два специальных курса с оценкой не менее 85
медаль три : должны быть в топ-5 в целомранжирование не менее одного раза
Медаль четвертая : должно иметь более 5000 баллов

Я в основном буду хранить это как метаданные в реляционной базе данных, вероятно, с такими столбцами ниже:

  • действие
  • количество действия
  • количество курса
  • оценка
  • идентификатор курса
  • позиция в рейтинге
  • баллов

Я хочу знать, есть ли какой-нибудь известный алгоритм / дизайн для такого рода проблемы?Или, возможно, я должен хранить их по-другому, чтобы было легче?Не знаю, мне нужны предложения.

1 Ответ

0 голосов
/ 20 декабря 2018

Ваши сомнения могут быть правильными.По моему мнению, база данных - неправильный способ организовать эти данные.Каждый новый вид достижений, который вы хотите создать, будет добавлять дополнительные столбцы в вашу базу данных, и большинство достижений не будет использовать большинство столбцов.Возможно, будет более полезной более гибкая структура данных, которая не предполагает, что для каждой записи будут использоваться все возможные критерии достижения сразу по умолчанию.Большинство языков поддерживают JSON , поэтому я предлагаю вам использовать это.Структура может выглядеть примерно так:

[
  {
    "name": "Medal One",
    "requirements": {
      "coursesCompleted": 5,
      "scoreMin": 90
    }
  },
  {
    "name": "Medal Two",
    "requirements": {
      "specificCoursesCompleted": [
        "Course 1",
        "Course 2"
      ],
      "scoreMin": 85
    }
  },
  {
    "name": "Medal Three",
    "requirements": {
      "generalRankingMin": 5
    }
  },
  {
    "name": "Medal Four",
    "requirements": {
      "scoreMin": 5000
    }
  }
]

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

PS: я сделал названия критериев очень многословными для демонстрационных целей;сокращать их или не использовать в реальных условиях - по выбору.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...