我有一个使用MySQL作为数据库和hibernate和struts的应用程序。我正在努力将其转换为使用Neo4J而不是Hibernate和MySQL。结构有点不同,是一种新的关系思维方式 - 它们更像是生活。无论如何,我有一个与公司节点有关系的人员节点,并且采用了这种关系。所以一个人在公司工作。一个人也有技能,这些技能可以在公司工作时获得。所以我需要以某种方式从雇佣关系转变为技能。
我知道你不能从关系到关系,因为它们只是从节点到节点(边缘)的关系。所以我确信我只需要想办法更好地联系这些对象。我想是以某种方式将雇用的关系分成一个节点作为经验。所以一个人有经验。他们通过在公司工作获得了这种经验。他们从这次经历中获得了这些技能。这是有道理的,但我认为节点是“具体”信息,我可以从这里开始并回到其他“具体”信息,并且在节点中获得经验似乎并不正确。它似乎含糊不清,似乎应该存储在一段关系中,这就是我现在拥有它的方式,所以我回到原点。
我正在努力解决的另一件事就是将经验分成一个节点可能有助于此,一个人可以从同一家公司获得多种类型的经验 - 可以说是在食物链上工作。因此,我需要有一个与不同经历有多种关系的人,这些经历可以指向同一家公司。这很好 - 拥有多个关系以获得多种体验是有道理的。对于一家公司来说,看看他们雇佣了谁似乎还有很长的路要走。
也许经验可能更像是一个职位。公司有一个职位,并且知道该职位具有与之相关的这些技能。该职位由一个人填补,该人可以将技能添加到已经与该职位相关联的内容中。但是他们添加的技能不需要作为默认添加,因此在从位置到技能的关系中需要一些标记。
嗯那可能有用。其他任何人都在努力解决Neo4J或任何图形数据库的这类域名构建问题。这绝对是一种思考数据结构的新方法。几乎最好忘记所学的rdbms知识和“规则”。
答案 0 :(得分:1)
您的案例中的一个等价物可能是与经验/职位节点相关的人员。 Experience节点有两种类型的关系 - 一种是EmployedAt,另一种是AquiredSkill。 例: (人) - [:具有] - GT;(经验) (经验) - [:EmployedAt] - GT;(公司) (经验) - [:AquiredSkill] - GT;(技巧)
您可以为一个人提供多种体验,为体验/职位提供多种技能。 通过这种方式,您可以通过他的经验追踪公司的人员技能/生命,如果您也分享技能,那么您可以跟踪公司的技能。
认为有意义吗?