Neo4j Design:何时使用属性进行关系

亚历山大·麦克法兰

Neo4j中使用RelationshipProperty属性的合适情况是什么 (包括何时以及何时不使用它们的示例)


例子

考虑由Team A使用的计算机Team B,其中每个团队id对计算机都有自己的内部价值

Node = Team : properties = {'name'='Team A'}
^
|
Relationship = "Used By..."
|
Node = Computer : properties = {'Type':'MacBook', 'CPU':'i7', 'id'='TeamA1-MBKi7'}

如果Team B具有相同的关系,但具有不同的值id

将属性id移出Computer节点并移入关系属性是否正确?

例如

Node = Team : properties = {'name'='Team A'}
^
|
Relationship = "Used By..." : properties = {'id'='TeamA1-MBKi7'}
|
Node = Computer : properties = {'Type':'MacBook', 'CPU':'i7'}
赛博

为了解决您的特定示例,您可以添加一个新的Model节点标签来描述计算机的类型,如下所示:

(:Team {name: 'Team A'})<-[:USED_BY]-(:Computer {id: 'TeamA1-MBKi7'})-[:IS_A]->(:Model {type:'MacBook', cpu:'i7'})

这将允许多个Computer节点共享相同的模型信息。

为了解决您的一般性问题,请考虑以下几点:

  1. Neo4j当前不允许您在关系上创建索引或唯一性约束。(对于节点,请记住:索引或唯一性约束始终与节点标签和节点属性相关联。)因此,如果要(或可能要)创建涉及属性的索引或唯一性约束,则应放置它在一个节点中。
  2. 一个关系只能使用一次,才能在2个节点之间建立单个连接。如果您希望(或曾经希望)在多个连接中包含相同的属性值,则应考虑将其放在节点中。
  3. 如果属性始终与特定的一对节点相关(而不仅与那些节点中的一个不相关),则它应该是一个关系属性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章