【问题标题】:Many to Many relationship using ListProperty Google App Engine Python使用 ListProperty Google App Engine Python 的多对多关系
【发布时间】:2013-04-19 14:40:36
【问题描述】:

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

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

【问题讨论】:

    标签: python google-app-engine python-2.7 listproperty


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-19
      • 1970-01-01
      • 2011-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-27
      相关资源
      最近更新 更多