如何在SQL中存储目标(想想RPG Quest)

时间:2010-09-08 21:56:40

标签: sql database-design schema

今天有人问我他们应该如何在SQL数据库中存储任务目标。在这种情况下,想一下RPG。目标可能包括以下一些内容:

  • 发现[位置]
  • 杀死[MOB类型]
  • 获取[Object]
  • 的n
  • 在[技能组]
  • 中获得[技能]
  • 您在RPG中获得的所有其他内容

我能想到的最好的是:

Quest 1-* QuestStep
QuestStep 1-* MobsToKill
QuestStep 1-* PlacesToFind
QuestStep 1-* ThingsToAcquire
QuestStep 1-* etc.

这看起来有点笨重 - 他们应该存储一些描述的查询(或公式或???)

任何建议赞赏

2 个答案:

答案 0 :(得分:8)

  • 用户可以执行许多任务。
  • 一个任务仅属于一个用户(在此模型中)。
  • 一个任务有很多目标,一个目标只属于一个任务。
  • 每个目标都是可能的目标之一。
  • 可能的目标是允许动作和动作对象的组合。
  • PossibleGoals表列出了所有允许的操作和对象组合。
  • 目标按任务中的StepNo排序。
  • Quantity定义一个动作应该对应的对象数量,(杀死5个MOB)。
  • Object是所有可能对象的超类型。
  • LocationMOBTypeSkill是对象子类型,每个子类型都有不同的属性(列)。

alt text

答案 1 :(得分:3)

我会创造这样的东西。

对于Quest表:

| ID | Title | FirstStep (Foreign key to GuestStep table) | etc.

QuestStep表

| ID | Title | Goal (Foreign key to Goal table) | NextStep (ID of next QuestStep) | etc.

当然,这是艰难的部分开始,我们如何描述目标?我会说在Goal表中为目标创建一条记录,并在GoalFields表中保存目标的每个字段(IE有多少类型要杀死,要访问的位置等等),因此: / p>

目标表:

| ID | Type (type is one from an Enum of goal types) |

GoalFields表

| ID | Goal (Foreign key to goal) | Field | Value |

我知道这可能有点模糊,所以这里有一个数据库中数据的样子的例子。

任务表

| 0 | "Opening quest" | 0 | ...
| 1 | "Time for a Sword" | 2 | ...

QuestStep表

| 0 | "Go to the castle" | 0 | 1 | ...
| 1 | "Kill two fireflies" | 1 | NULL | ...
| 2 | "Get a sword" | 2 | NULL | ...

目标表

| 0 | PlacesToFind |
| 1 | MobsToKill |
| 2 | ThingsToAcquire |

GoalFields表

| 0 | 0 | Place | "Castle" |
| 1 | 1 | Type | "firefly" |
| 2 | 1 | Amount | 2 |
| 3 | 2 | Type | "sword" |
| 4 | 2 | Amount | 1 |