【问题标题】:Neo4j: How to model relationship properties that are nodes?Neo4j:如何为节点的关系属性建模?
【发布时间】:2014-06-18 11:30:27
【问题描述】:

假设我有一个简单的关系,比如

CREATE (a:Company { name:"Apple" })-[:BUYS]->(b:Company { name:"Beats" })

现在我想收集有关 :BUYS 关系的元数据 - 哪个用户创建了该关系以及确认这一点的来源是什么。为此,我创建了一个新节点并将其他节点连接到它:

MATCH (a:Company { name:"Apple" }),(b:Company { name:"Beats" }) 
CREATE a-[:IS_BUYER]->(ab:Buyout { name:"Apple-Beats" })<-[:IS_SELLER]-b

MATCH (u:User { name:"Fred" }),(n1:Newspaper { name:"Washington Post" }),
   (n2:Newspaper { name:"Financial Times" }),(ab:Buyout { name:"Apple-Beats" }) 
CREATE u-[:CREATED]->ab<-[:CONFIRMED_BY]-n1,ab-[:CONFIRMED_BY]->n2

现在我有几个问题:

  1. 因为在大多数情况下查询只对:BUYS 感兴趣 关系,我会保持原样并为这些查询获得更好的性能,对吗?
  2. 还有其他更好的方法来对此进行建模吗?
  3. 为物化节点生成名称/ID 的好方法是什么?
  4. 有没有办法将:BUYS关系的删除级联到对应的:Buyout节点?

【问题讨论】:

    标签: neo4j reification


    【解决方案1】:
    1. 当然可以保持:BUYS 关系。但是,您应该首先检查关注(company)-[:IS_BUYER]-&gt;()&lt;-[:IS_SELLER]-(other) 是否会降低您的要求。做过早优化。
    2. 如果需要从域中的另一个“事物”引用关系,则应将其重构为节点 - 这里的建模方法非常好。
    3. 如果从域的角度来看没有意义,则无需在中间节点上设置任何属性
    4. 不,Neo4j 没有任何级联行为。这需要在应用程序级别实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-15
      • 1970-01-01
      • 2020-03-29
      • 1970-01-01
      • 1970-01-01
      • 2015-07-11
      相关资源
      最近更新 更多