Параметры моделирования GAE - PullRequest
0 голосов
/ 07 апреля 2010

Мне нужно смоделировать следующую ситуацию, и я не могу найти последовательный пример того, как сделать это «правильно» для приложения Google двигатель.

Предположим, у меня есть простая ситуация, подобная следующей:

Company 1 -----> M Store

Компания имеет один-много магазинов. Каждый магазин имеет адрес, состоящий из адресная строка 1, город, штат, страна, почтовый индекс и т. д.

Ok. Допустим, нам нужно создать, скажем, «Аудит». Аудит для компании и может быть от одного до многих взглядов.

Так что-то вроде:

Audit 1 ------> 1 Company
      1 ------> M Store

Теперь нам нужно запросить все «аудиты» на основе Магазина. «адреса» для отправки «Аудиторов» в нужные места.

Кажется, есть много подобных статей:

http://code.google.com/appengine/articles/modeling.html

В которых приводятся примеры создания класса модели "ContactCompany". Однако они также говорят, что вы должны использовать такие отношения только когда вам «действительно нужно» и с «заботой» о производительности.

Я также читал - часто - что вы должны денормализовать столько, сколько возможно, таким образом, перемещая все данные с возможностью запроса в Аудит класс.

Так что бы вы предложили как лучший способ решить эту проблему?

Я видел, что есть класс Expando, но я не уверен, что это «лучший» вариант для этого.

Любая помощь или мысли по этому поводу будут полностью оценены.

Заранее спасибо, Мэтт

1 Ответ

1 голос
/ 07 апреля 2010
class Company(db.Model):
   name = db.StringProperty()

class address(db.Model):
   address = db.PostalAddressProperty()

class store(db.Model):
   company = db.ReferenceProperty(Company)
   address = db.ReferenceProperty(Address)

Теперь вы можете запросить весь магазин компании,

company_oject.address_set.all().filter().fetch()

, если это не MNC с тысячами хранилищ, этот запрос должен работать нормально в большинстве случаев.

http://code.google.com/appengine/docs/python/datastore/entitiesandmodels.html#References

помогает в дальнейшем.

...