У меня есть две модели в моем приложении, Транзакция и Человек, с отношением «многие ко многим». В каждую транзакцию включены лица. Для каждого человека также есть сумма, связанная с каждой транзакцией, к которой он подключен. Поэтому мне нужно смоделировать отношения «многие ко многим» с данными отношения. 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, чтобы найти связанную транзакцию. И я все еще могу запрашивать транзакции, основанные на человеке.
ВОПРОСЫ