我正在开发此成就系统,它必须具有CRUD,管理员可以访问以创建新成就及其规则。我需要有关此设计和算法的帮助,以便它可以按照管理员的要求随新规则轻松发展。
一等奖:必须完成至少5门课程的总分至少为90分
第二个奖章:必须完成至少85分的两个特定课程
第3奖章:必须至少一次进入总排名前5名
第四奖章:必须获得5000点以上
我基本上会将其作为元数据存储在关系数据库中,可能包含以下几列:
我想知道是否存在针对此类问题的已知算法/设计?或者也许我应该以不同的方式存储它们以使其更容易?不知道,我想要建议。
答案 0 :(得分:1)
您的疑问可能是正确的。我认为,数据库是组织此数据的错误方法。您要创建的每种新成就都会在数据库中添加额外的列,并且大多数成就不会使用大多数列。一种更灵活的数据结构(可能不希望每个条目默认都一次使用所有可能的成就标准)可能会更有用。大多数语言都支持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:出于演示目的,我使标准名称非常冗长;缩短或不缩短它们的使用取决于偏好。