Я бы создал что-то вроде этого.
Для таблицы квестов:
| 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, таким образом:
Таблица целей:
| 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 |