2010-07-23 102 views
0

我有一个数据模型,我不确定是否可以从实体组中的嵌套类获得任何好处。其基本模式是用户拥有许多马匹,马只能自己一个鞍:嵌套实体组?

// Model 1, nest everything: 
User 
    Horse 
     Saddle 
    Horse 
     Saddle 

// Model 2: Just let them all be siblings. 
User 
    Horse 
    Horse 
    Saddle 
    Saddle 

我不知道我是否获得对嵌套鞍实例的任何好处马下,或者我应该只是让他们都是兄弟姐妹。

生成密钥:

// Model 1: 
Key key = new KeyFactory.Builder(
    User.class.getSimpleName(), userid) 
    .addChild(Horse.class.getSimpleName(), horseid) 
     .addChild(Saddle.class.getSimpleName(), saddleid).getKey(); 

// Model 2: 
Key key = new KeyFactory.Builder(
    User.class.getSimpleName(), userid) 
    .addChild(Saddle.class.getSimpleName(), saddleid).getKey(); 

所以生成密钥为1的情况更多的工作,我想知道我是否应该只需切换到情况2,而不是,如果我没有获得对附加任何优势筑巢?我必须做的操作:

  1. 删除一匹马和它的马鞍。
  2. 用马鞍创造一匹马。
  3. 更新一匹马和它的马鞍。
  4. 单独获得一匹马。
  5. 同时获得一匹马和它的马鞍。

两个模型给我所有上述,我认为。也许模型#1提供的优点是,仅在鞍座上执行操作时,整个用户对象不必被锁定?

由于

回答

2

the docs

与给定的根实体 作为祖先每个实体是相同的实体 组中使用。组中的所有实体都存储在同一个数据存储节点中的 。

和:

只有使用实体组在需要的时候进行交易 。对于实体之间的其他 关系,请使用 ReferenceProperty属性和键值 值,这些值可用于查询。

无论是否嵌套,这两种模型都会为每个用户生成一个实体组。如果您只想表示对象的层次结构,则应该完全避免实体组并使用ReferenceProperty。