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

在Neo4j中,何时使用关系合适?,neo4j,Neo4j,我正在建模一个事件系统。假设我有一个名为event_A的事件。当我创建一个事件时,我捕获了一些信息-谁导致了事件(人A),谁受到了事件的影响(人B),以及人B是如何受到影响的(B的财产(汽车、房子等)被识别) (事件A)->[:影响]->(人{is:b}) 现在的关键是——我是否: 将“人员A”和“B的财产”放入事件A?将有数百个活动,最终。。。还是我 使它们成为影响关系的属性 两者都可以 #1的优点/缺点: 每个事件必须有一个事件节点;没有分享。这很烦人,因为我在EVENT_A中有可以在所有E

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

(事件A)->[:影响]->(人{is:b})

现在的关键是——我是否:

  • 将“人员A”和“B的财产”放入事件A?将有数百个活动,最终。。。还是我
  • 使它们成为影响关系的属性
  • 两者都可以

    #1的优点/缺点:

  • 每个事件必须有一个事件节点;没有分享。这很烦人,因为我在EVENT_A中有可以在所有EVENT_A节点之间共享的信息;即,事件含义的文本描述
  • 我可以将person A关联到适当的person节点,甚至不将其作为EVENT_A的属性
  • #2的优点/缺点:

  • 一个节点可能涉及的许多相同事件:对多人的影响
  • “影响”属性不能与其他节点关联,因此我可能会失去一些查询优势
  • 这种关系看起来是空的,好像我在利用它

  • 那么,什么是关系中的内容以及哪些内容堆积到节点中的指导原则呢?

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

    (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})