我有一个使用 MySQL 作为 DB 和 hibernate 和 struts 的应用程序。我正在努力将其转换为使用 Neo4J 而不是 Hibernate 和 MySQL。结构有点不同,是一种新的关系思考方式——它们更栩栩如生。无论如何,我有一个与公司节点有关系的人员节点,并且使用了这种关系。所以一个人受雇于一家公司。一个人也有技能,这些技能可以在受雇于公司时获得。所以我需要以某种方式从雇佣关系转变为技能。
我知道你不能从一个关系转到一个关系,因为它们只是从一个节点到一个节点(一条边)的关系。所以我确定我只需要想办法更好地关联这些对象。我正在考虑以某种方式将雇佣关系拆分为一个节点作为经验。所以一个人是有经验的。他们通过受雇于一家公司获得了这种经验。他们从这次经历中获得了这些技能。这是有道理的,但我认为节点是“具体的”信息,我可以从那里开始并返回其他“具体”信息,并且在节点中拥有经验似乎并不正确。它似乎含糊不清,似乎应该存储在一段关系中,这就是我现在的方式,所以我回到了原点。
我正在努力解决的另一件事是将体验拆分为一个节点可能会对此有所帮助,那就是一个人可以从同一家公司获得多种类型的体验——可以说是沿着食物链向上发展。因此,我需要一个与不同经历有多重关系的人,这些经历指向同一家公司。这很好 - 拥有多种关系以拥有多种体验是有意义的。对于一家公司来说,要看看他们雇佣了谁,似乎还有很长的路要走。
也许这种经历更像是一个职位。一家公司有一个职位,并且该职位具有与他们相关的这些技能。该职位由一个人担任,该人可以将技能添加到已经与该职位相关联的内容。但是他们添加的那些技能不需要默认添加,因此需要在从位置到技能的关系中添加一些标志。
嗯,这可能行得通。其他任何人都在为 Neo4J 或任何图形数据库的此类域构建问题而苦苦挣扎。这绝对是一种新的数据结构思维方式。几乎最好忘记你学到的所有 rdbms 知识和“规则”。