Graph Neo4J想知道如何设置域结构。分裂的关系

Graph Neo4J想知道如何设置域结构。分裂的关系,graph,neo4j,spring-data-neo4j,Graph,Neo4j,Spring Data Neo4j,我有一个使用MySQL作为数据库、hibernate和struts的应用程序。我正在将其转换为使用Neo4J,而不是Hibernate和MySQL。这种结构有点不同,是一种新的思考关系的方式——它们更像生活。无论如何,我有一个person节点,它与公司节点有关系,并且关系被使用。因此,一个人受雇于一家公司。一个人也有技能,这些技能可以在受雇于公司时获得。所以我需要从雇佣关系到技能 我知道你不能从一个关系到另一个关系,因为它们只是从一个节点到一个节点(边缘)的纽带。所以我确信我只需要想一个方法来更

我有一个使用MySQL作为数据库、hibernate和struts的应用程序。我正在将其转换为使用Neo4J,而不是Hibernate和MySQL。这种结构有点不同,是一种新的思考关系的方式——它们更像生活。无论如何,我有一个person节点,它与公司节点有关系,并且关系被使用。因此,一个人受雇于一家公司。一个人也有技能,这些技能可以在受雇于公司时获得。所以我需要从雇佣关系到技能

我知道你不能从一个关系到另一个关系,因为它们只是从一个节点到一个节点(边缘)的纽带。所以我确信我只需要想一个方法来更好地关联这些对象。我在考虑以某种方式将雇佣关系分割成一个节点,或许作为体验。所以一个人有经验。他们是在一家公司工作而获得这种经验的。他们从这次经历中获得了这些技能。这是有道理的,但我认为节点是“具体的”信息,我可以从这里开始,然后回到其他“具体的”信息,而在节点中体验似乎并不正确。这似乎很模糊,似乎是应该储存在关系中的东西,这就是我现在所拥有的,所以我回到了原点

另一件我正在努力解决的事情是,一个人可以从同一家公司获得多种类型的体验,可以说是沿着食物链向上。因此,我需要一个有多重关系的人,有不同的经历,可以追溯到同一家公司。这很好——拥有多重关系和多重经历是有意义的。对于一家公司来说,要想知道他们雇佣了谁,似乎还有很长的路要走

也许这种经历更像是一个职位。一家公司有一个职位,而该职位已知具备与之相关的技能。该职位由一名人员担任,该人员可以向已经与该职位相关的职位添加技能。但是他们添加的技能不需要作为默认值添加,因此需要在位置和技能之间的关系中添加一些标志


嗯,那可能行。任何其他人都在为Neo4J或任何图形数据库的此类领域构建问题而挣扎。这无疑是一种新的数据结构思维方式。几乎最好忘记你学到的所有rdbms知识和“规则”。

是的,你遇到了hyperedge。看看

在您的案例中,其中一个等价物可能是与经验/职位节点相关的人员。体验节点有两种类型的关系-一种是EmployedAt,另一种是AquiredSkill。 例子: (人)-[:有]->(经验) (经验)-[:EmployedAt]->(公司) (经验)-[:获得技能]->(技能)

你对一个人有多种经验,对一个经验/职位有多种技能。 通过这种方式,你可以通过一个人在公司的经历来追踪他的技能/一生,如果你也分享了这种技能,那么你就可以追踪整个公司的技能集


你觉得这有道理吗?

是的,就是这样。谢谢你的帮助。我原以为这是第三种解决方案,但让我感到困惑的是,与过渡节点“体验”之间的某种模糊关系。所以我试图让它更具描述性,像“经验”,但我需要的信息是在两个不同的节点,我得到了超边缘分裂的关系。再次感谢。