【问题标题】:Domain design involving 3 NODES and 1 RELATIONSHIP in Neo4jNeo4j中涉及3个节点和1个关系的域设计
【发布时间】:2015-01-27 08:17:38
【问题描述】:

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

一个人可以有很多技能。 PERSON 可以在不同的组织中工作。每个组织都可以根据他们提出的每个技能对一个人进行排名。 现在 PersonA 有技能 SkillA 和 SkillB 。他在 TaskA 上工作,需要在 OrganizationA 中使用 SkillA,在 TaskB 上需要在 OrganizationB 中使用 SkillA。

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

【问题讨论】:

  • 哇,现在有很多 neo4j 回答者在线... ;)

标签: neo4j


【解决方案1】:

这个呢?

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

【讨论】:

    【解决方案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)
    

    【讨论】:

    • 您错过了将任务连接到组织。
    【解决方案3】:

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

    例如,请查看 Recruitment GraphGist http://gist.neo4j.org/?0278fc6cbba43c4bf964,它从招聘的角度对您的数据子集进行建模。

    【讨论】:

      【解决方案4】:

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

      这是一个样本模型,它可能适合也可能不适合您的需求。它(根据您的要求)添加了一个节点,用于为他所说的每项技能存储一个人自己的“声称的技能水平”。此节点允许多人为每种技能类型共享一个 :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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-08-27
        • 2015-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-14
        • 1970-01-01
        相关资源
        最近更新 更多