Neo4j 设计:何时使用关系属性
Neo4j Design: When to use Properties for Relationships
使用 Property attribute of a Relationship in Neo4j 的正确情况是什么? (包括何时和何时不使用它们的示例)
例子
考虑 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
节点共享相同的模型信息。
为了解决您更笼统的问题,这里有一些想法:
- Neo4j 目前不允许您在关系上创建索引或唯一性约束。 (请记住,对于节点:索引或唯一性约束始终与节点标签和节点 属性 相关联。)因此,如果您想要(或可能想要)创建涉及 属性,你应该把它放在一个节点中。
- 一个关系只能使用一次,在两个节点之间建立一个连接。如果你想(或可能曾经想)在多个连接中包含相同的 属性 值,你应该考虑将它放在一个节点中。
- 如果 属性 总是与特定的一对节点相关(而不是只与其中一个节点相关),那么它应该是一种关系 属性.
使用 Property attribute of a Relationship in Neo4j 的正确情况是什么? (包括何时和何时不使用它们的示例)
例子
考虑 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
节点共享相同的模型信息。
为了解决您更笼统的问题,这里有一些想法:
- Neo4j 目前不允许您在关系上创建索引或唯一性约束。 (请记住,对于节点:索引或唯一性约束始终与节点标签和节点 属性 相关联。)因此,如果您想要(或可能想要)创建涉及 属性,你应该把它放在一个节点中。
- 一个关系只能使用一次,在两个节点之间建立一个连接。如果你想(或可能曾经想)在多个连接中包含相同的 属性 值,你应该考虑将它放在一个节点中。
- 如果 属性 总是与特定的一对节点相关(而不是只与其中一个节点相关),那么它应该是一种关系 属性.