今天有人问我他们应该如何在SQL数据库中存储任务目标。在这种情况下,想一下RPG。目标可能包括以下一些内容:
我能想到的最好的是:
Quest 1-* QuestStep
QuestStep 1-* MobsToKill
QuestStep 1-* PlacesToFind
QuestStep 1-* ThingsToAcquire
QuestStep 1-* etc.
这看起来有点笨重 - 他们应该存储一些描述的查询(或公式或???)
任何建议赞赏
答案 0 :(得分:8)
PossibleGoals
表列出了所有允许的操作和对象组合。StepNo
排序。Quantity
定义一个动作应该对应的对象数量,(杀死5个MOB)。Object
是所有可能对象的超类型。Location
,MOBType
和Skill
是对象子类型,每个子类型都有不同的属性(列)。
答案 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 |