我正在建立一个Facebook应用程序,需要访问用户的Facebook页面。场景是这样的: -
用户(管理员)可以有多个页面,一个页面有多个管理员。每个页面上都可以有多个帖子。我已经看过谷歌应用程序引擎文档(建模实体关系)。他们使用ListProperty来实现多对多关系和一对多关系的引用属性。
我认为类的结构就像
class User(db.Model):
id = db.StringProperty(required=True)
name = db.StringProperty(required=True)
profile_url = db.StringProperty(required=True)
access_token = db.StringProperty(required=True)
pages = db.ListProperty(db.Key)
class Page(db.Model):
id = db.StringProperty()
name = db.StringProperty()
page_access_token = db.TextProperty()
users = db.ListProperty(db.Key)
class Post(db.Model):
page = db.ReferenceProperty(User,collection_name='posts')
post_content = db.TextProperty()
published = db.BooleanProperty()
这是对的还是我确实需要改变它。 谢谢
答案 0 :(得分:0)
有多种方式可以做多对多的关系。使用ListProperties是一种方法。如果使用ListProperties,请记住的限制是每个实体的索引数量有限制,以及总实体大小的限制。这意味着列表中的实体数量有限制(取决于您是先达到索引计数还是实体大小)。请参阅本页底部:https://developers.google.com/appengine/docs/python/datastore/overview
如果您认为引用的数量在此限制范围内,则这是一个很好的方法。考虑到你不会为一个页面拥有数千名管理员,这可能是正确的方法。
另一种方法是让一个中间实体对多对多的两边都有引用属性。这种方法可以让你扩展得更高,但由于所有额外的实体写入和读取,这要贵得多。