【发布时间】:2011-08-11 12:54:35
【问题描述】:
我的应用程序中有两个模型,Transaction 和 Person,具有多对多关系。每笔交易都包括一些人。对于每个人,该人所连接的每笔交易也有一个金额。因此,我需要用关系数据建模多对多关系。 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 次以在汇总金额时实现“加入”。
我的想法
我的想法是在 Transaction 模型中有两个列表:
class Transaction(db.Model):
persons = ListProperty(db.Key)
persons_amount = ListProperty(float)
这样我就不需要遍历每个人的所有 TransactionPerson 来找到关联的 Transaction。而且我仍然可以根据 Person 查询 Transactions。
问题
- 这可能吗?您能否相信在存储/检索时列表顺序始终相同,以便列表之间的索引同步?
- 这是实现与关联数据的多对多关系的好方法吗?
【问题讨论】:
标签: python google-app-engine google-cloud-datastore