【问题标题】:App engine datastore and Java low-level api: many to many relationship应用引擎数据存储和 Java 低级 api:多对多关系
【发布时间】:2011-07-21 18:41:34
【问题描述】:

我只是想知道如何使用数据存储区中的低级 api 在两个实体之间建立多对多关系,我一直在寻找,但找不到解释如何建立这种关系的文档。我希望有人能帮帮忙。

但如果我有实体 A 和实体 B 处于多对多关系中,我该如何存储在数据存储区中。我的意思是,这是在数据存储中存储多对多关系的好解决方案,或者什么是好的解决方案?这段代码是好的还是错误的?

Entity entityA = new Entity("TypeA");
entityA.setProperty("name", "nameUserA");

Entity entityB = new Entity("TypeA");
entityA.setProperty("name", "nameUserB");

ds.put(entityA);
ds.put(entityB);

Entity entityChild = new Entity("entityChild",entityAKey);
entityChild.setProperty("name","child");

 ds.put(entityChild);

Entity entityChild = new Entity("entityChild",entityBKey);
entityChild.setProperty("name","child");

 ds.put(entityChild);

【问题讨论】:

  • 创建 entityChild 的内容是什么?您希望在哪些实体之间建立关系?
  • 我只是想代表一个多对多关系,如果我有一个子实体并使用每个父实体的键创建两次是一个好的解决方案吗?还是只创建一次并创建一个包含这些实体的键作为属性的实体更好?
  • 不是1-1(最大1-n,如果一个实体的孩子很少)关系吗? entityA - 第一个 entityChild,entityB - 第二个 entityChild
  • 使用低级 API 在数据存储中保持多对多关系的方式是什么?
  • 如果相关实体的数量不多(几十万),那么我将使用相关项目的键列表。其实是一对多的关系,但也可以通过反向关系查询,所以大部分情况下变成多对多。

标签: java google-app-engine google-cloud-datastore entity-relationship low-level-api


【解决方案1】:

AppEngine 不为多对多关系提供任何功能。

您可以通过创建自己的实体来模拟它,使用两个字段:

class AtoBRelations {
  Key entityA 
  Key entityB
}

我的常见模式是为多对多关系提供一个额外的表,即使对于其他数据库也是如此

顺便说一句,在大多数情况下,这不是最佳解决方案。最佳解决方案取决于必须如何使用这种多对多关系,并且几乎没有不同的解决方案

例如有第二种解决方案:您可以存储相关实体的列表,例如:

class EntityA {
   List<Key> entitiesB
}

【讨论】:

  • 但是如果我的实体 A 和实体 B 处于多对多关系中,我该如何存储在数据存储中。我的意思是。
  • 您必须创建第三个条目AtoBRelationship,并将其也存储起来。顺便说一句,最好告诉你到底想达到什么,我会告诉你适合你具体场景的最佳解决方案
  • 我已经用更多信息编辑了我的问题,你说我必须创建一个具有两个属性的新实体,即在多对多关系中找到的实体的键?
  • 是用关系的键创建一个新实体的好方法吗?像这样的东西 Entity entityRelation = new Entity("relationA-B"); entityRelation.setProperty("keyA",KeyA);entityRelation.setProperty("keyB",KeyB); ?
猜你喜欢
  • 1970-01-01
  • 2016-04-20
  • 2023-03-18
  • 1970-01-01
  • 2013-08-23
  • 2014-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多