【问题标题】:Modeling conditional relationships in neo4j v.2 (cypher)在 neo4j v.2 (cypher) 中建模条件关系
【发布时间】:2014-03-10 19:10:11
【问题描述】:

我有两个相关的问题需要帮助。

问题 1:如何为条件关系建模? 我希望我的数据表明,当测试 CLT1 的“结果”属性 =“高”时,CLT1 与疾病 A 有关系。如果我采用以节点为中心的方法,我想代码可能看起来像......

(CLT 1 {Result: "High"})  -[:INDICATES] -> (Disease A)

进一步,当CLT1的“Result”属性=“Low”时,CLT1与疾病B有关系

(CLT 1 {Result: "Low"})  -[:INDICATES] ->  (Disease B)

或者,如果我采用以关系为中心的方法,代码可能如下所示...

(CLT 1) -[:INDICATES {Result: "High"}] -> (Disease A)
(CLT 1) -[:INDICATES {Result: "Low"} ] -> (Disease B)

问题 2

我有过对数据建模的经验,有 1 个节点具有唯一名称,但标签或属性不同。问题是我希望这些节点是可区分的。但是,它们与 cypher 看起来不同。

我可以给它们多个属性、标签或不同的名称。多样性必须针对每个不同的类别……在标签或属性(1+n 个标签、属性)或不同的名称中。

问题 2 与问题 1 相关,因为我无法对条件关系建模或通过标签或属性区分同一节点 (CLT1)。我可能必须通过在关系中创建可查询的“条件”来解决它。

我有这个权利吗?我还有其他选择吗?

【问题讨论】:

    标签: neo4j conditional cypher relationships


    【解决方案1】:

    对于您的第一个问题,我会采用以关系为中心的方法,因为这种方法代表了从结果节点到疾病的信息的推断。

    在建模和查询方面也应该工作得很好。

    关于你的第二个问题。这就是节点标签的意义所在,因为它们代表节点可以扮演的不同角色,每个角色都具有不同的相关属性和关系。

    因此,您可以使用 MATCH (p:Person {name:"Jose"}) 并将其与 MATCH (d:Developer {name:"Jose"}) 区别对待。即看看其他的道具和关系。

    【讨论】:

    • 嗨,迈克尔,感谢您回来。好的,但是第二个问题是 CLT1 有标签 A 和属性 B。但是,另一种 CLT1 有标签 B 和属性 C。它们都是 CLT1,但是如果我尝试用相同的名称定义它们,Neo4j/cypher 说它已经根据名称定义。看来我只能根据名称来区分节点,而不是标签或属性。因此,可以将名称与属性或标签结合起来,或者给出多个属性和/或标签。这些似乎是选项。
    • 迈克尔,考虑到你的回答,我认为我有一个根本的误解。我在想节点的名称通常在创建语句之后首先出现......(CREATE(Hugo:Person {name:'Hugo Weaving',born:1960}))。我从您的回答中想到的是,我可以将相关标签放在首位,然后将名称保留为属性。在电影示例中使用“雨果”这一事实不一定是最佳实践。如果您不包括名称,那么您将拥有更大的灵活性。我有这个权利吗?
    • 何塞:现在你做对了。你在Cyber​​中给节点取的名字只是一个变量名,没有其他意义
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 2018-01-27
    • 1970-01-01
    相关资源
    最近更新 更多