首页 > 解决方案 > 动态成就系统算法/设计

问题描述

我正在开发这个成就系统,它必须有一个 CRUD,管理员可以访问以创建新的成就和它的规则。我需要一些有关此设计和算法的帮助,以便它可以根据管理员的要求轻松地随着新规则的发展而发展。

规则样本

奖牌一:必须完成5门任何课程,得分至少为90
奖牌二:必须完成两门特定课程,得分至少为85
奖牌三:必须至少达到总排名前5名
奖牌四:必须超过5000 点

我基本上会将其作为元数据存储在关系数据库中,可能包含以下这些列:

我想知道这种问题是否有任何已知的算法/设计?或者也许我应该以不同的方式存储它们以使其更容易?不知道,求建议。

标签: algorithmdesign-patternsdata-structures

解决方案


你的怀疑可能是对的。在我看来,数据库是组织这些数据的错误方式。您想要创建的每种新成就都会向您的数据库添加额外的列,并且大多数成就不会使用大多数列。一个更灵活的数据结构,一个不期望每个条目默认同时使用所有可能的成就标准的数据结构,可能会更有用。大多数语言都支持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:出于演示目的,我使标准名称非常冗长;在实际使用中是否缩短它们取决于偏好。


推荐阅读