首页 > 解决方案 > 存储游戏先决条件信息的 MYSQL 数据库模式

问题描述

游戏有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 数据库中。我可以想到两种方法来存储上述信息:

方法一:

  1. LEVELS 表 - 列:ID、级别名称
  2. SKILLS 表 - 列:ID、技能名称
  3. SKILL_PREREQUISITE 表 - 列:ID、LevelID、SkillID、requiredValue
  4. LEVEL_PREREQUISITE - 列:ID、LevelID、prerequisiteLevelID

方法二:

  1. LEVELS 表 - 列:ID、级别名称
  2. LEVEL_SKILL 表 - 列:ID、QuestID、Run、Fly、Sleep、Jump、Shoot
  3. LEVEL_PREREQUISITE - 列:ID、LevelID、prerequisiteLevelID

我的用例如下:

考虑到玩家的技能,以及他们完成的关卡,他们有资格参加哪些关卡?

牢记这一点,方法 1、方法 2 或完全不同的方法是解决我的问题的最佳解决方案吗?如果这是前进的道路,我也愿意接受不依赖于 MYSQL 的建议!

注意:玩家信息(即:技能等级、完成等级)不在数据库中。将它们视为输入参数,将在查询中用于获取玩家的合格级别

标签: mysqldatabase-design

解决方案


这取决于您的级别和技能是否固定,或者您是否计划在以后添加新的级别和/或技能(或希望至少接受这种可能性)。

在第一种情况下,我认为一个非常简单的表将提供一个很好的解决方案,假设此类问题的数字表示:

  1. 技能:技能 0 意味着玩家没有技能(或者如果您认为 0 是有效技能,那么 -1 可能意味着没有技能)
  2. 级别:0 表示未完成,1 表示已完成。

在这种情况下,先决条件表可能有 16 个属性:

LevelID, RequiredRun, RequiredJump, RequiredShoot, RequiredFly, RequiredSleep, RequiredLevel1, RequiredLevel2,...,RequiredLevel10

和十行,例如,在您的示例中对应于级别 5 的行是:

5 90 0 0 10 25 1 1 1 0 0 0 0 0 0 0

另一方面,如果您想设计一些可以在未来发展的东西,那么您的方法 1 是正确的方法。


推荐阅读