0

我正在构建一个需要访问用户的 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()

这是正确的还是我确实需要改变它。谢谢

4

1 回答 1

0

建立多对多关系有不同的方式。使用 ListProperties 是一种方法。如果使用 ListProperties,要记住的限制是每个实体的索引数量有限制,并且总实体大小有限制。这意味着列表中的实体数量有限制(取决于您是先达到索引计数还是实体大小)。请参阅本页底部:https ://developers.google.com/appengine/docs/python/datastore/overview

如果您认为引用的数量将在此限制内起作用,那么这是一个不错的方法。考虑到您不会有成千上万的主页管理员,这可能是正确的方法。

另一种方法是拥有一个中间实体,该实体具有对多对多双方的引用属性。这种方法可以让你扩展得更高,但是由于所有额外的实体写入和读取,这要昂贵得多。

于 2013-04-19T16:37:19.090 回答