域设计涉及Neo4j中的3个NODES和1个RELATIONSHIP

时间:2015-01-27 08:17:39

标签: neo4j

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

PERSON可以有很多技能。 PERSON可以在不同的组织中工作。每个组织都可以对他们构成的每个技能进行排名。 现在PersonA拥有SKILLS SkillA和SkillB。他在TaskA工作,需要在OrganizationA和TasKB中使用SkillA,这需要在OrganizationB中使用SkillA。

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

4 个答案:

答案 0 :(得分:3)

这个怎么样?

(: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)

答案 1 :(得分:2)

通常,它取决于您的查询。 我可以想象你的数据集结构的用法,然后我可能选择这样的东西:

(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)

答案 2 :(得分:1)

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

举个例子,看一下Recruitment GraphGist http://gist.neo4j.org/?0278fc6cbba43c4bf964,它会对您的数据子集进行建模,但是从招聘的角度来看。

答案 3 :(得分:1)

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

以下示例模型可能适合您的需求,也可能不适合您。它(根据您的规定要求)添加了一个节点,用于存储一个人自己声称的技能级别"对于他所说的每项技能。此节点允许多个人为每种类型的技能共享一个: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)