当前位置: 首页 > 面试题库 >

App Engine:一对多关系的结构化属性与参考属性

雷国兴
2023-03-14
问题内容

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

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

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

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

在这种情况下,数据存储的参考属性或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,其中包含他们有权访问的项目的键。

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

您要挂在键上的主要原因是要根据HRD最终的一致性来保持数据的可访问性。

让我知道您是否需要更多帮助。

编辑:

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

楷模:

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

用户模型应包含User-Project-Mapping作为重复的结构化属性。

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

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

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



 类似资料:
  • 问题内容: 我有实体类A和C。它们正在映射表tblA和tblC,并且它们之间具有多对多关系,而tblB可以在它们之间进行映射。tblB包含A_ID,C_ID和SetDate,最后一个是它的设置日期,因此是关系的属性。我的问题是,如何最好地映射此属性?目前,它们尚未映射,如下所示: A: C: 我应该如何从中获取tblB.SetDate? 干杯 问题答案: 据我所知, 不可能 以这种方式映射它,您必

  • 问题内容: 我有实体类A和C。它们正在映射表tblA和tblC,并且它们之间具有多对多关系,而tblB则在它们之间进行映射。tblB包含A_ID,C_ID和SetDate,最后一个是它的设置日期,因此是关系的属性。我的问题是,如何最好地映射此属性?目前,它们尚未映射,如下所示: A: C: 我应该如何从中获取tblB.SetDate? 干杯 尼克 问题答案: 据我所知, 不可能 以这种方式进行映射

  • 属性参数用来给已定义的属性附加元数据,类似于脚本语言的 Decorator 或者 C# 的 Attribute。 属性检查器相关参数 参数名 说明 类型 默认值 备注 type 限定属性的数据类型 (Any) undefined 详见 type 参数 visible 在 属性检视器 面板中显示或隐藏 boolean (注1) 详见 visible 参数 displayName 在 属性检视器 面板

  • 属性参数用来给已定义的属性附加元数据,类似于脚本语言的 Decorator 或者 C# 的 Attribute。 属性检查器相关参数 参数名 说明 类型 默认值 备注 type 限定属性的数据类型 (Any) undefined 详见 type 参数 visible 在 属性检视器 面板中显示或隐藏 boolean (注1) 详见 visible 参数 displayName 在 属性检视器 面板

  • 问题内容: 当序列化具有其他对象引用的Java对象时,我只需要序列化嵌套对象的一个​​属性(通常为外键,因此序列化对象引用的“ id”属性)。拥有其他一切。 例如,我有两个类需要将其序列化为JSON和XML(为清楚起见,删除了JPA注释): 关系:用户- >(一对多)AddressInformation;另外:AddressInformation->(一对一)用户 地址信息: 例如,当序列化用户时

  • 问题内容: 有人可以给我展示一种代码有效的方法,以 根据从超链接发送给它的参数在spring mvc中更改对象属性吗? 我正在修改spring petclinic示例应用程序,以便“所有者” 详细信息页面可以显示特定 “所有者”拥有的每种“宠物”的单独列表。当前,“宠物”列表是每个“所有者”的属性, 可以在jstl中作为owner.pets访问。我想要的是让我的 jstl代码能够从jstl调用ow