Neo4j 是否应将具有特性的边建模为图形数据库中的节点?

Neo4j 是否应将具有特性的边建模为图形数据库中的节点?,neo4j,Neo4j,我正在学习图形数据库(具体来说是Neo4j),我选择了为游戏建模。这个游戏由每个玩家将城市连接起来组成。有些城市之间有两条路,可能颜色不同。例如,从纽约到波士顿,你可以选择花两张红牌或两张黄牌。从蒙特利尔到波士顿有两条路,但它们可以接受任何颜色,从蒙特利尔到纽约,你只能花3张蓝卡 (来源:) 我需要回答的问题有: 穿过纽约、波士顿和蒙特利尔的最长路径是什么 从迈阿密到蒙特利尔的最短路径是什么,不包括蒙特利尔和波士顿之间的路段(可能是因为其他球员选择了这条路线) 4的哪些部分使用红色 我的问

我正在学习图形数据库(具体来说是Neo4j),我选择了为游戏建模。这个游戏由每个玩家将城市连接起来组成。有些城市之间有两条路,可能颜色不同。例如,从纽约到波士顿,你可以选择花两张红牌或两张黄牌。从蒙特利尔到波士顿有两条路,但它们可以接受任何颜色,从蒙特利尔到纽约,你只能花3张蓝卡


(来源:)

我需要回答的问题有:

  • 穿过纽约、波士顿和蒙特利尔的最长路径是什么
  • 从迈阿密到蒙特利尔的最短路径是什么,不包括蒙特利尔和波士顿之间的路段(可能是因为其他球员选择了这条路线)
  • 4的哪些部分使用红色
我的问题是:城市之间的路线/路段是节点还是关系?我可以从两方面看问题。使它们成为节点而不是关系是否有好处


在路由上,我需要记住的唯一属性是玩家拥有路由的内容,或者一些哨兵值(与NULL不同)来指示路由尚未拥有。

在做出此决定时,我经常问自己的规则之一是:如果我将其设为一个节点,我是否需要或改进它,也就是说:通过一个节点,我可以将其他关系连接到它。您提到您需要将用户或所有者与该关系联系起来,在这种情况下,它是节点(表示您的路由)的一个很好的候选

(Boston:Place)-[:route]->(x:Route)-[:route]->(Montreal:Place)
此处使用Neo4j 2.0上的标签+

还请注意,如果您需要搜索属于某人的路由,那么将其作为关系使用会更快,然后将其构建到索引中,因为我认为在某个点上您可能有很多很多路由,从而使其成为一个相当大的索引,但在这一点上,我可能是错误的,但这需要考虑

至于最长和最短,你可以使用

shortestPath((n1:Place)-[r:route:*..]-(n2:Place))

若要排除,请查看WHERE子句,因为您很可能会在WHERE r中做一些事情。

在做出此决定时,我经常问自己的一个规则是:如果我将其设置为节点,我是否需要或改进内容,也就是说:使用节点,我可以将其他关系连接到它。您提到需要将用户或所有者与该关系关联,在这种情况下,它是一个很好的候选节点(代表您的路由)

(Boston:Place)-[:route]->(x:Route)-[:route]->(Montreal:Place)
此处使用Neo4j 2.0上的标签+

还请注意,如果您需要搜索属于某人的路由,那么将其作为关系使用会更快,然后将其构建到索引中,因为我认为在某个点上您可能有很多很多路由,从而使其成为一个相当大的索引,但在这一点上,我可能是错误的,但这需要考虑

至于最长和最短,你可以使用

shortestPath((n1:Place)-[r:route:*..]-(n2:Place))
若要排除,请查看WHERE子句,因为您最有可能执行WHERE r操作