【发布时间】:2019-02-09 23:42:30
【问题描述】:
游戏有 5 种技能可供玩家使用:
Skills: Run, Jump, Shoot, Fly, Sleep
玩家可以拥有所有技能,一个子集或一个都没有。玩家将拥有与每项技能相对应的值,该值会根据他们的表现而增加或减少。玩家的技能组合示例如下:
run: 30
jump: 87
Sleep: 2
接下来,游戏有 10 个关卡。每个级别都有一组玩家在能够参加比赛之前需要满足的先决技能。一个级别也可能具有完成另一个级别的先决条件。
例如,5 级可能有以下先决条件:
Level 5 requires: 10 Fly, 25 Sleep, 90 Run and completion of level 1,2,3
对于我的用例(在最后给出),我决定将先决条件信息存储在 MYSQL 数据库中。我可以想到两种存储上述信息的方法:
方法一:
- LEVELS 表 - 列:ID、级别名称
- SKILLS 表 - 列:ID、技能名称
- SKILL_PREREQUISITE 表 - 列:ID、LevelID、SkillID、requiredValue
- LEVEL_PREREQUISITE - 列:ID、LevelID、prerequisiteLevelID
方法2:
- LEVELS 表 - 列:ID、级别名称
- LEVEL_SKILL 表 - 列:ID、QuestID、跑步、飞行、睡眠、跳跃、射击
- LEVEL_PREREQUISITE - 列:ID、LevelID、prerequisiteLevelID
我的用例如下:
考虑到玩家的技能,以及他们已完成的关卡,他们有资格参加哪些关卡?
记住这一点,方法 1、方法 2 或完全不同的方法是解决我的问题的最佳解决方案吗?如果这是前进的道路,我也愿意接受不依赖于 MYSQL 的建议!
注意:玩家信息(即:技能等级、已完成等级)不在数据库中。将它们视为输入参数,将在查询中用于获取符合条件的玩家关卡
【问题讨论】:
-
绝对不会接近2
-
方法 1 看起来像是“过度规范化”。为什么用“16”而不是“睡眠”?
标签: mysql database-design