У меня в приложении две модели: транзакция и персона с отношением «многие ко многим».Есть люди, включенные в каждую транзакцию.Для каждого человека есть также сумма, связанная с каждой транзакцией, к которой он подключен.Поэтому мне нужно смоделировать отношения многие ко многим с данными отношений.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)
Но я считаю, что это очень плохо для производительности, потому что если янеобходимо суммировать сумму для каждого Лица во всех Транзакциях, которые мне нужны для того, чтобы циклически обрабатывать данные о Лице * Транзакция * Транзакция-Персона при суммировании сумм.1014 * Моя идея состоит в том, чтобы в модели транзакций было два списка:
class Transaction(db.Model):
persons = ListProperty(db.Key)
persons_amount = ListProperty(float)
Таким образом, мне не нужно циклически просматривать все TransactionPerson для каждого человека, чтобы найти связанную транзакцию.И я все еще могу запрашивать транзакции, основанные на персоне.
ВОПРОСЫ
- Возможно ли это?Можете ли вы поверить, что порядок хранения списков всегда одинаков, поэтому индексы синхронизируются между списками?
- Является ли это хорошим способом реализации связи «многие ко многим» со связанными данными?