Neo4j家谱关系设计

时间:2017-06-06 09:28:21

标签: neo4j relationship family-tree

我正在使用Neo4j设计扩展的家谱。 在设计关系时,我提出了两种方法:

  1. CREATE (p:Person)-[:PARENT_OF]->(s:Person) CREATE (p:Person)-[:STEPPARENT_OF]->(s:Person) CREATE (p:Person)-[:MARRIED_TO]->(s:Person)
  2. 通过这种方法,我为每个案例创建了不同的关系(请记住,会有很多案例=很多关系)

    1. CREATE (p:Person)-[r:PARENT_OF {type:'natural'}]->(s:Person) CREATE (p:Person)-[r:PARENT_OF {type:'step'}]->(s:Person) CREATE (p:Person)-[r:SPOUSE_OF {type:'marriage'}]->(s:Person)
    2. 采用这种方法会减少关系,但设计有点混乱。

      我想知道哪种方法更好,为什么?

1 个答案:

答案 0 :(得分:3)

您选择的是beetwen细粒度(:PARENT_OF:STEPPARENT_OF:MARRIED_TO)或一般关系(:PARENT_OF {type:'natural'}:PARENT_OF {type:'step'}:SPOUSE_OF {type:'marriage'} )。

By Ian Robinson,Jim Webber和EmilEifrém撰写的图表数据库(可在Neo4j网站上download获得)中说:

  

按关系名称区分是消除的最佳方式   来自遍历的大图。使用一个或多个   属性值决定是否遵循关系   第一次访问这些属性时会产生额外的I / O,因为   属性驻留在一个单独的商店文件中   关系(之后,它们被缓存)。

请记住,应该根据应用程序需求构建图形数据库模型。也就是说:它主要取决于您向数据库询问的查询类型。

  • 如果您需要在图表横向查询中评估关系的type,可能最好将其拆分为单独的关系类型。
  • 否则,请将其保留为通用关系类型的属性。