在Neo4j中,何时使用关系是合适的?

时间:2015-10-28 18:17:44

标签: neo4j

我正在为事件系统建模。假设我有一个名为EVENT_A的事件。当我创建一个事件时,我会捕获一些信息 - 导致事件的人(A人),受事件影响的人(B人)以及B人如何受到影响(B的财产(汽车,房屋等)被识别出来。)

(EVENT_A) - > [:AFFECTS] - >(PERSON {是:b})

现在的关键 - 我:

  1. 将“A人”和“B的财产”放入EVENT_A?将有数百个EVENT_A,最终......或者我
  2. 在AFFECTS关系中创建它们的属性吗?
  3. 要么工作。

    #1的优点/缺点:

    1. 每个事件必须有一个事件节点;没有分享。这很烦人,因为我在EVENT_A中有可以在所有EVENT_A节点之间共享的信息;即,该事件的含义的文字说明。
    2. 我可以将人A与相应的PERSON节点联系起来,甚至不将它作为EVENT_A上的属性。
    3. #2的优点/缺点:

      1. 许多相同的EVENT_A节点可能与via:AFFECTS与多个PERSON有关。
      2. AFFECTS的属性无法与其他节点相关,因此我可能会失去一些查询优势。
      3. AFFECTS关系看起来是空的,就像我利用它一样。
      4. 那么关于什么是关系以及哪些东西被堆积到节点中的指南是什么?

1 个答案:

答案 0 :(得分:1)

最好在关系中使用不同的关系类型而不是一个属性。

(PERSON {name: 'Rebeca'})-[:CAUSED]->(EVENT_A {id: 1})->[:AFFECTS_CAR]->(PERSON {name: 'John'})
(PERSON {name: 'Joe'})-[:CAUSED]->(EVENT_A {id: 2})->[:AFFECTS_HOUSE]->(PERSON {name: 'Rebeca'})
(PERSON {name: 'Simon'})-[:CAUSED]->(EVENT_A {id: 3})->[:AFFECTS_ETC]->(PERSON {name: 'William'})

此外,为了在节点之间共享信息,您可以拥有节点。

(EVENT_A {id: 1})-[:HAS]->(DESCRIPTION {id: 1})
(EVENT_A {id: 2})-[:HAS]->(DESCRIPTION {id: 1})
(EVENT_A {id: 3})-[:HAS]->(DESCRIPTION {id: 1})