Выбор видов детей из хранилища данных движка приложения - плюсы и минусы - PullRequest
1 голос
/ 03 марта 2010

У меня есть модели, настроенные следующим образом:

class Day(db.Model):
    date = db.DateProperty()
    total = db.FloatProperty()

class Event(db.Model):
    desc = db.StringProperty()
    amount = db.FloatProperty()

Иерархия такова: Пользователь> День> Событие (У пользователей есть дни. У дней есть события.)

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

Должен ли я использовать родительское свойство для создания явной группы сущностей? Или я должен добавить справочное свойство в День для пользователя и добавить справочное свойство в Событие на день?

Каковы плюсы и минусы каждого метода? Вопросы производительности? Вопросы масштабируемости? А также, как бы я запросил это наилучшим образом.

Спасибо!

1 Ответ

1 голос
/ 03 марта 2010

Если вам необходимо транзакционно обновить модели Day и Event вместе (например, это поле «total» требует обновления с каждым событием), используйте группы сущностей. В противном случае используйте ссылочные свойства.

Чтобы наиболее эффективно выбрать все события в диапазоне дат, лучшим вариантом будет несколько денормализовать и также добавить свойство «дата» в событие. Затем вы можете выполнить запрос по всем событиям для данного пользователя в заданном диапазоне и извлечь из них сущности Day, если они вам нужны.

...