1

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

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节点?
4

1 回答 1

0
  1. 当然你可以保持这种:BUYS关系。但是,您应该首先检查以下(company)-[:IS_BUYER]->()<-[:IS_SELLER]-(other)是否会降低您的要求。做过早优化。
  2. 如果需要从您的域中的另一个“事物”引用关系,则应将其重构为节点 - 这里的建模方法非常好。
  3. 如果从域的角度来看它们没有意义,则不需要在中间节点上设置任何属性
  4. 不,Neo4j 没有任何级联行为。这需要在应用程序级别实现。
于 2014-06-18T17:05:01.517 回答