Моделирование "многие-ко-многим" с данными отношения в Google App Engine

У меня есть две модели в моем приложении, Транзакция и Человек, с отношением «многие ко многим». В каждую транзакцию включены лица. Для каждого человека также есть сумма, связанная с каждой транзакцией, к которой он подключен. Поэтому мне нужно смоделировать отношения «многие ко многим» с данными отношения. Google предлагает такой подход:

http://code.google.com/intl/sv-SE/appengine/articles/modeling.html

При таком подходе у меня есть такая модель:

class TransactionPerson(db.Model):
    # References
    transaction = db.ReferenceProperty(Transaction, required=True)
    person = db.ReferenceProperty(Person, required=True)
    # Values
    amount = db.FloatProperty(required=True)

Но я считаю это очень плохо для производительности, потому что, если мне нужно суммировать сумму для каждого человека во всех транзакциях, мне нужно зациклить раз Person * Transaction * TransactionPerson, чтобы реализовать «соединение» при суммировании сумм.

МОЯ ИДЕЯ

Моя идея состоит в том, чтобы иметь два списка в модели транзакций:

class Transaction(db.Model):
    persons = ListProperty(db.Key)
    persons_amount = ListProperty(float)

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

ВОПРОСЫ

  1. Возможно ли это? Можете ли вы поверить, что порядок списков всегда один и тот же при сохранении / извлечении, поэтому индексы синхронизируются между списками?
  2. Является ли это хорошим способом реализации связи «многие ко многим» со связанными данными?

6
задан thejaz 11 August 2011 в 12:54
поделиться