MYSQL数据库架构,用于存储游戏先决条件信息

时间:2019-02-09 14:06:49

标签: mysql database-design

游戏具有玩家可以拥有的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:

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

方法2:

  1. LEVELS表-列:ID,级别名称
  2. LEVEL_SKILL表-列:ID,QuestID,运行,飞行,睡眠,跳转,射击
  3. LEVEL_PREREQUISITE-列:ID,LevelID,prerequisiteLevelID

我的用例如下:

给定玩家的技能以及他们完成的等级,他们有资格参加哪些等级?

牢记这一点,方法1,方法2或完全不同的解决方案是解决我的问题的最佳方法吗?如果这是前进的方向,我也欢迎不依赖于MySQL的建议!​​

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

1 个答案:

答案 0 :(得分:1)

这取决于您的级别和技能是否固定,或者您打算以后再添加新的级别和/或技能(或希望至少对此保持开放状态)。

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

  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是正确的选择。