Datastore Design Запрос - PullRequest
       5

Datastore Design Запрос

1 голос
/ 09 января 2010

Я создаю приложение Trivia, и мне нужна помощь в разработке отношений модели. Этот вопрос может быть довольно сложным, но я постараюсь быть кратким.

Вопросы викторины все будут частью определенной категории. Категории могут быть категорией в другой категории. Если вопрос пустяков создан / удален, я должен удостовериться, что я также обновляю счетчик. Таким образом, я смогу увидеть, сколько вопросов в каждой категории, и отобразить их пользователям. Если у категории есть дочерние категории, мне понадобится способ отображения совокупного счетчика всех подкатегорий. Точные подсчеты довольно важны, но не критически важны. Я не против использования заколоченных счетчиков. Мой вопрос: как мне спроектировать это так, чтобы оно приняло денормализацию GAE и поддерживало оптимизацию?

Я думал о том, чтобы иметь класс Category с ListProperty в каждом, который будет представлять дерево предков. Он будет содержать ключ к каждому родительскому объекту в дереве по порядку. Но должен ли я также указывать родителя при создании объектов или это не нужно в этом случае? Я думаю, что мне, возможно, придется запускать обновления счетчика в транзакции, поэтому я рассматриваю отношения между родителями и детьми.

Или, возможно, есть более оптимизированный способ построения моих отношений, который все еще позволит мне вести достаточно точные счетчики всех вопросов в каждой категории. Заранее спасибо за любую помощь.

Ответы [ 2 ]

0 голосов
/ 10 января 2010

Это не так сложно, как вы думаете. Вот класс категории:

class Category(db.Model):
    title = db.StringProperty()
    subcategories = db.ListProperty(db.Key)
    quizzes = db.ListProperty(db.Key)

    def add_sub_category(self, title):
        new_category = Category(title)
        new_category.put()
        self.subcategories.append(new_category)
        self.put()

        return new_category

Сохраняя подкатегории и тесты, связанные с этой категорией, в ListProperty, получить их количество так же просто, как с помощью оператора len ().

Вы можете использовать что-то вроде этого:

main_category = Category("Main")
main_category.put()

sports_category = main_category.add_sub_category("Sports")
baseball_category = sports_category.add_sub_category("Baseball")
football_category = sports_category.add_sub_category("Football")
hockey_category = sports_category.add_sub_category("Hockey")

tv_category = main_category.add_sub_category("TV")

... и т.д ...

0 голосов
/ 09 января 2010

Я не очень знаком с Google App Engine, но вот некоторые мысли. Во-первых, стоит рассмотреть, являются ли «теги» более подходящими, чем категории и подкатегории. Будет ли это жесткая двухуровневая схема категории? Будут ли все предметы иметь основную и подкатегорию назначения?

Вместо того, чтобы иметь класс для каждой категории, рассматривали ли вы класс CategoryList, который будет иметь метод incrementCategoryByName (str name)? Класс содержит словарь классов, не требующий дополнительной нагрузки на класс для каждой категории.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...