Graph 属性图(Neo4j)设计:具有多个关系的单个节点还是每个事件发生的新节点?

Graph 属性图(Neo4j)设计:具有多个关系的单个节点还是每个事件发生的新节点?,graph,neo4j,spring-data-neo4j,spring-data-graph,property-graph,Graph,Neo4j,Spring Data Neo4j,Spring Data Graph,Property Graph,假设我有两个联赛L1和L2。每个联赛可以有多轮,如季后赛、四分之一决赛、半决赛和决赛。此外,我还需要代表一个事实,即四分之一决赛发生在季后赛之后,半决赛发生在四分之一决赛之后,决赛发生在半决赛之后 问题 我的图表应该为每一轮都有一个节点,并且每个联盟应该链接到这些轮吗?这样,我们只是创建了新的关系(例如,L1和L2都与季后赛有关系),但只有一个季后赛节点。然而,这限制了关系之后发生的,因为有些联赛可以有更多的回合(例如,第2轮可以在四分之一决赛之前进行)。有没有更好的方法来表示这一点 用例 需要

假设我有两个联赛L1和L2。每个联赛可以有多轮,如季后赛、四分之一决赛、半决赛和决赛。此外,我还需要代表一个事实,即四分之一决赛发生在季后赛之后,半决赛发生在四分之一决赛之后,决赛发生在半决赛之后

问题

我的图表应该为每一轮都有一个节点,并且每个联盟应该链接到这些轮吗?这样,我们只是创建了新的关系(例如,L1和L2都与季后赛有关系),但只有一个季后赛节点。然而,这限制了关系之后发生的,因为有些联赛可以有更多的回合(例如,第2轮可以在四分之一决赛之前进行)。有没有更好的方法来表示这一点

用例

  • 需要能够找到给定联赛的所有回合
  • 需要能够找到给定联赛所有回合的顺序,以及每个回合发生的日期
  • 编辑


    一般来说,每一个有自己标识的东西都应该成为一个节点。关系将“事物”联系在一起

    不确定我是否完全理解你的领域。L1、L2和每一轮都是节点。关系league->round表示给定的联盟参与该轮

    回合内的时间顺序可以通过回合之间的前后关系来建模。通过这种方式,您可以构建一个轮次链接(或双链接)列表。
    表示时间顺序的另一种方法是为循环存储索引时间戳属性。如果你只是对之前或之后而不是绝对时间感兴趣,那么第一种方法(链表)似乎更合适。

    我在帖子中添加了图片。L1有两个级别(季后赛和第二轮),但L2有两个“不同”级别(季后赛和四分之一决赛)。如何在此处编写查询以确定给定联盟的所有级别?问题在于是共享轮节点还是为每个联盟创建轮节点。共享使查询变得复杂,但减少了节点数(实际上这并不重要)。然后为每个联盟创建一个简单的联盟。如果联盟数量有限,您可以使用“下一个l1”和“下一个l2”将联盟本身编码为“下一个”关系。此外,联盟应该在第一轮(帕约夫)有下一轮的l1/l2关系。然后,按照时间顺序获取所有回合的查询是:
    start l=node:leagues(leagues:'L1')match l-[:NEXT_L1*]->n return n
    +1 NEXT_L1是个好主意,但我不能在spring-data-neo4j中表示这一点,因为每个新的联盟都意味着一种新的关系类型,并且关系是在spring-data-neo4j中静态键入的