Учитывая следующие структуры таблиц, где каждый содержит раздел, хранящийся в квесты в RPG. Я пытаюсь найти лучший способ запросить текущие данные для каждого игрока.RPG Quests - Запрос данных игрока
Некоторая информация о структуре квеста. Она находится в трехуровневом порядке со многими квестами за уровень. В пределах квеста есть много Заданий для каждого NPC, которые должны быть завершены, но в хронологическом порядке. Также показано на рисунке:
Мой текущий макет дизайна следующим использованием MySQL:
CREATE TABLE NPCs (
ID int AUTO_INCREMENT,
Name varchar(50),
RoomID int,
X int(2),
Y int(2),
TypeID int,
ImageID int,
PRIMARY KEY(ID),
FOREIGN KEY (ImageID) REFERENCES Images(ID)
ON UPDATE CASCADE,
FOREIGN KEY (TypeID) REFERENCES NPCTypes(ID)
ON UPDATE CASCADE,
FOREIGN KEY (RoomID) REFERENCES Rooms(ID)
ON UPDATE CASCADE
);
CREATE TABLE Quests (
ID int AUTO_INCREMENT,
QuestNumber int,
Name varchar(50),
NPCID int,
RewardXP int(3)
RewardMoney int(3),
LevelID int,
Text varchar(100),
CompletedText varchar(100),
PRIMARY KEY(ID),
FOREIGN KEY (LevelID) REFERENCES Levels(ID)
ON UPDATE CASCADE,
FOREIGN KEY (NPCID) REFERENCES NPCs(ID)
ON UPDATE CASCADE
);
CREATE TABLE QuestStages (
ID int AUTO_INCREMENT,
UserID int,
QuestID int,
Accepted bool,
Complete bool,
PRIMARY KEY(ID),
FOREIGN KEY (UserID) REFERENCES Users(ID)
ON UPDATE CASCADE,
FOREIGN KEY (QuestID) REFERENCES Quests(ID)
ON UPDATE CASCADE
);
CREATE TABLE LinkedQuests (
ID int AUTO_INCREMENT,
QuestID int,
PreQuestID int,
PRIMARY KEY(ID),
FOREIGN KEY (QuestID) REFERENCES Quests(ID)
ON UPDATE CASCADE,
FOREIGN KEY (PreQuestID) REFERENCES Quests(ID)
ON UPDATE CASCADE
);
Каждый квест начинается с задания семян и вы будете следовать через эти задачи хронологически, но необходимо простой способ запроса данных.
Поскольку игрок может начать, приостановить и возобновить задачи за любой NPC в данный момент времени, я пытаюсь выяснить, лучший способ для запроса данных в различных форматах:
Список не завершена Квесты Квесты с использованием UserID (Quests.ID, Quests.Accepted, Quests.Name, Quests.Text, Quests.RoomID, Quests.RewardMoney, Quests.RewardXP)
Сведения о выборе Quest с использованием ID (Quests.ID, Quests. Имя, Quest.Text/Quest.CompletedText // основывается, если завершено или нет // Quests.RewardMoney, Quests.RewardXP)
Подробная информация о квесты в комнате и в порядке д NPC, используя RoomID (Quests.ID, Quests.Accepted, NPCs.ID AS NPCID, NPCs.X, NPCs.Y)
РЕДАКТИРОВАТЬ Вот пример
Quests
ID | QuestNumber | Name | NPCID | RewardXP | RewardMoney | LevelID | Text | CompletedText
1 | 1 | "Quest1" | 1 | 10 | 10 | 1 | "do this" | "Well Done"
2 | 2 | "Quest2" | 1 | 10 | 10 | 1 | "do this" | "Well Done"
3 | 3 | "Quest3" | 2 | 10 | 10 | 1 | "do this" | "Well Done"
4 | 4 | "Quest4" | 2 | 10 | 10 | 1 | "do this" | "Well Done"
5 | 5 | "Quest5" | 2 | 10 | 10 | 1 | "do this" | "Well Done"
6 | 6 | "Quest6" | 3 | 10 | 10 | 1 | "do this" | "Well Done"
NPCs
ID | RoomID
1 | 1
2 | 1
3 | 2
QuestStages
ID| UserID | QuestID | Accepted | Complete
1 | 1 | 2 | TRUE | FALSE
2 | 1 | 3 | TRUE | TRUE
3 | 1 | 4 | FALSE | FALSE
4 | 1 | 5 | TRUE | TRUE
5 | 1 | 6 | TRUE | FALSE
LinkedQuests
QuestID | PreQuestID
2 | 1
5 | 4
4 | 3
Показаны список заданий для пользователя. ID 1 1
Quests.ID| Quests.Accepted| Quests.Name| Quests.Text| Quests.RoomID| Quests.RewardMoney | Quests.RewardXP
3 | TRUE | "Quest3" | "do this" | 1 | ...
// will not show Quest 2 as is completed
// will not show Quest 4 as it is dependent on quest 3 being completed
ли вы имеете в виду 'RPG = Отчет о реализации программы Generator'? или «Ролевые игры»? Потому что, если это второй случай, вы используете неправильный тег. –
Покажите нам пример данных и ожидаемый результат. \t Пожалуйста, прочитайте [** How-to-Ask **] (http://stackoverflow.com/help/how-to-ask) \t \t И вот отличное место для [** START **] (http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/), чтобы узнать, как улучшить качество вопроса и получить лучшие ответы. –
Sorry, имею ввиду Ролевые игры –