Недавно я завершил приложение App Engine для того, чтобы принимать индивидуальные викторины.
Я бы сказал, пройдите по простому маршруту и сохраните все о каждой викторине в одном субъекте викторины.Если вам не нужно повторно использовать вопросы между викторинами, не нужно искать или в любом другом доступе способа структуры викторины, кроме принимая викторину, вы можете просто сделать:
class Quiz(db.Model):
data = db.TextProperty(default=None)
Затем данные может быть структура JSON, подобная:
data = {
"title" : "Capitals quiz",
"questions" : [
{
"text" : "What is the capital of Finland?"
"options" : ["Stockholm, Helsinki, London"],
"correct" : 1
}
...
]
}
Вещи, для которых вам нужны индексы, которые вы хотите оставить из этой структуры данных. Например, в моем приложении я обнаружил, что мне нужно оставить идентификатор создателя викторины вне данных, чтобы я мог сделать запрос хранилища данных для всех викторин, созданных определенным человеком. Кроме того, у меня есть дата создания вне данных, поэтому я могу запросить последние викторины.
created = db.DateTimeProperty(auto_now_add=True)
Возможно, у вас есть другие поля. Как я уже сказал, это очень простой способ хранения викторин, без необходимости иметь несколько объектов хранилища данных или запросы для викторины. Тем не менее, он хорошо зарекомендовал себя на практике в моем приложении для тестирования личностей и является все более популярным способом хранения данных.
Хотя это хороший реляционный дизайн, он не будет работать хорошо для приложения AppEngine, которое использует нереляционный хранилище данных Google BigTable. BMac, ответ ниже Bemmu намного ближе к тому, что вам нужно для приложения AppEngine. –