Neo4j中涉及3个节点和1个关系的域设计

Neo4j中涉及3个节点和1个关系的域设计,neo4j,Neo4j,我需要在neo4j中为以下用例设计域 一个人可以有很多技能。一个人可以在不同的组织中工作。每个组织都可以根据一个人的每项技能对其进行排名。 现在,人物角色拥有技能SkillA和SkillB。他从事的任务A需要组织A中的技能,而任务B需要组织B中的技能 如何在neo4j中设计上述案例。通常,这取决于您的查询。 正如我可以想象的那样,使用您的数据集结构,那么我可能会选择这样的方式: (p:Person), (o:Organization), (s:Skill), (t:Task) (p)-[:WOR

我需要在neo4j中为以下用例设计域

一个人可以有很多技能。一个人可以在不同的组织中工作。每个组织都可以根据一个人的每项技能对其进行排名。 现在,人物角色拥有技能SkillA和SkillB。他从事的任务A需要组织A中的技能,而任务B需要组织B中的技能


如何在neo4j中设计上述案例。

通常,这取决于您的查询。 正如我可以想象的那样,使用您的数据集结构,那么我可能会选择这样的方式:

(p:Person), (o:Organization), (s:Skill), (t:Task)
(p)-[:WORK_AT]->(o)
(p)-[:WORK_ON]->(t)
(p)-[:HAVE]->(s)
(t)-[:REQUIRE]->(s)
(t)-[:BELONGS_TO]->(o)

通常,这取决于您的查询。 正如我可以想象的那样,使用您的数据集结构,那么我可能会选择这样的方式:

(p:Person), (o:Organization), (s:Skill), (t:Task)
(p)-[:WORK_AT]->(o)
(p)-[:WORK_ON]->(t)
(p)-[:HAVE]->(s)
(t)-[:REQUIRE]->(s)
(t)-[:BELONGS_TO]->(o)
这个怎么样

(:Person), (:Organization), (:Skill), (:Ranking), (:Task)

(:Person)-[:works_at]->(:Organization)
(:Organization)-[:gives_ranking]->(:Ranking)
(:Ranking)-[:ranks_person {rank: value}]->(:Person)
(:Ranking)-[:for_skill]->(:Skill)
(:Person)-[:works_on]->(:Task)
(:Task)-[:requires_skill]->(:Skill)
这个怎么样

(:Person), (:Organization), (:Skill), (:Ranking), (:Task)

(:Person)-[:works_at]->(:Organization)
(:Organization)-[:gives_ranking]->(:Ranking)
(:Ranking)-[:ranks_person {rank: value}]->(:Person)
(:Ranking)-[:for_skill]->(:Skill)
(:Person)-[:works_on]->(:Task)
(:Task)-[:requires_skill]->(:Skill)

这完全取决于您的用例以及您希望从图表中回答的问题


举个例子,看看招聘图列表,它对您的数据子集进行建模,但从招聘的角度来看。

这完全取决于您的用例以及您希望从图中回答的问题


例如,请查看招聘图列表,该列表对您的数据子集进行建模,但从招聘的角度来看。

为了正确回答此问题,您确实需要提供您想要进行的查询类型。许多模型都是可能的,但只有一些模型可能适合以性能和/或优雅的方式进行查询

这是一个示例模型,可能适合您的需要,也可能不适合您的需要。它(在您声明的需求中)添加了一个节点,用于存储一个人所拥有的每项技能的“声称的技能级别”。此节点允许多个人为每种类型的技能共享一个
:Skill
节点,同时还为组织的评级(
:RATES
)关系提供每个人/技能的节点

(:Person)-[:CLAIMS]->(:ClaimedSkillLevel {level:95})-[:FOR]->(:Skill {name: "Java"})<-[:REQURES]-(:Task)<-[:HAS_TASK]-(:Organization)
(:ClaimedSkillLevel)<-[:RATES {rating:75}]-(:Organization)
(:Person)-[:WORKED_ON]->(:Task)

(:Person)-[:CLAIMS]->(:claimdskilllevel{level:95})-[:FOR]->(:Skill{name:“Java”})为了正确回答这个问题,您确实需要提供您想要进行的查询类型。许多模型都是可能的,但只有一些模型可能适合以性能和/或优雅的方式进行查询

这是一个示例模型,可能适合您的需要,也可能不适合您的需要。它(在您声明的需求中)添加了一个节点,用于存储一个人所拥有的每项技能的“声称的技能级别”。此节点允许多个人为每种类型的技能共享一个
:Skill
节点,同时还为组织的评级(
:RATES
)关系提供每个人/技能的节点

(:Person)-[:CLAIMS]->(:ClaimedSkillLevel {level:95})-[:FOR]->(:Skill {name: "Java"})<-[:REQURES]-(:Task)<-[:HAS_TASK]-(:Organization)
(:ClaimedSkillLevel)<-[:RATES {rating:75}]-(:Organization)
(:Person)-[:WORKED_ON]->(:Task)

(:Person)-[:claimdskilllevel{level:95})-[:FOR]>(:Skill{name:“Java”})您错过了将任务连接到组织的机会。您错过了将任务连接到组织的机会。哇,现在在线上有很多neo4j回答者…;)哇,现在网上有很多neo4j回答者…;)