gpt4 book ai didi

python - 应用引擎 : Structured Property vs Reference Property for one-to-many relationship

转载 作者:太空狗 更新时间:2023-10-29 20:46:05 24 4
gpt4 key购买 nike

我设计数据存储的背景来自 iOS 上的 Core Data,它支持与另一个实体具有一对多关系的属性。

我正在开发一个 App Engine 项目,该项目目前具有三种实体类型:

  • User,代表使用应用程序的人。
  • Project,代表一个项目。一个 User 可能与许多项目相关联。
  • Post,这是Project背后的主要内容。一个 Project 可能有很多帖子。

目前,User 有一个属性,projects,它是一个与Project 实体的一对多关系。 Project 有一个属性,posts,它是与 Post 实体的一对多关系。

在这种情况下,Datastore 的引用属性或 NDB 的结构化属性更适合这项工作(这两者在概念上有何不同)?有没有更好的方法来构建我的数据?

最佳答案

通过引用属性,您可能指的是关键属性。这是对另一个数据存储实体的引用。它存在于 db 和 ndb API 中。使用这些,您可以通过将许多实体指向另一个实体的键来建模多对一关系。

结构化属性是完全不同的野兽。它允许您定义数据结构,然后将其包含在另一个实体中。

这是文档中的一个示例,其中您为单个联系人包含多个地址:

class Address(ndb.Model):
type = ndb.StringProperty() # E.g., 'home', 'work'
street = ndb.StringProperty()
city = ndb.StringProperty()

class Contact(ndb.Model):
name = ndb.StringProperty()
addresses = ndb.StructuredProperty(Address, repeated=True)

guido = Contact(name='Guido',
addresses=[Address(type='home',
city='Amsterdam'),
Address(type='work',
street='Spear St',
city='SF')])

guido.put()

对于您的特定应用程序,我建议使用 NDB(最好使用可用的最新版本的 api),具有以下内容:

发布模型作为重复的结构化属性包含在项目模型下。用户包含一个重复的 KeyProperty,其中包含他们有权访问的项目的 key 。

为了让它更复杂一些,您可以创建另一个模型来表示项目和权限/角色,然后将其作为重复的结构化属性包含在用户模型中。

您想要保留 key 的主要原因是根据 HRD 的最终一致性保持数据可访问。

如果您需要更多帮助,请告诉我。

编辑:

为了澄清,这里是建议的结构:

模型:

  • 用户
  • 用户-项目-映射(可选,需要处理权限)
  • 项目
  • 发布

用户模型应包含用户项目映射作为重复的结构化属性。

项目模型应包含 Post 作为重复结构化属性。

User-Project-Mapping只需要包含对Project的Key引用和相关权限表示。

由于这听起来像是一个商业项目,如果您需要进一步的帮助,我很乐意为您提供咨询。希望你有足够的成功!

关于python - 应用引擎 : Structured Property vs Reference Property for one-to-many relationship,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14072491/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com