双指点关系?关系的关系?

时间:2014-10-13 11:12:06

标签: neo4j

如何在节点对另一个节点(关系)执行操作时以及在事件中进行建模?什么是最好的解决方案?

例如:PLayerA- [PASSED] - > PlayerB- [IN] - > GameA

除非GameA是您唯一获得的游戏,否则您无法查询。 对我来说有意义的是让IN关系从PASSED关系开始。像这样:

Made up relationship

我很大一部分时间告诉我,我不知道这个原因我还不了解图形建模。您如何以最佳方式对此进行建模?

1 个答案:

答案 0 :(得分:2)

我认为正确的建模方法是将Passed关系提取到节点中 - 创建HyperEdge。新的传递节点现在将与源和目标玩家以及传球发生的游戏有关系。 Mark Needham在DZone上有一个与足球相关的例子。

您的查询最终会更像:

MATCH (p:Player{name:'Player A'})-[:PASSED]->(po:PassObject)-[:RECEIVED]->(r:Player{name:'Player B'})
RETURN COUNT(po)

对于两位球员之间的所有传球,或者:

MATCH (p:Player{name:'Player A'})-[:PASSED]->(po:PassObject)-[:RECEIVED]->(r:Player{name:'Player B'})
MATCH (po)-[:IN_GAME]->(g:Game)
WHERE g.fixture = "WhateverYouUseToIdentifyYourGames"
RETURN COUNT(po)

单场比赛中的传球。