Database design Neo4j设计:何时为关系使用属性

Database design Neo4j设计:何时为关系使用属性,database-design,neo4j,Database Design,Neo4j,在中使用a属性的合适情况是什么?(包括何时和何时不使用它们的示例) 例子 考虑团队a和团队B使用的计算机,其中每个团队都有自己的计算机内部值id: Node = Team : properties = {'name'='Team A'} ^ | Relationship = "Used By..." | Node = Computer : properties = {'Type':'MacBook', 'CPU':'i7', 'id'='TeamA1-MBKi7'} 如果

在中使用a属性的合适情况是什么?(包括何时和何时不使用它们的示例)


例子 考虑
团队a
团队B
使用的计算机,其中每个团队都有自己的计算机内部值
id

Node = Team : properties = {'name'='Team A'}
^
|
Relationship = "Used By..."
|
Node = Computer : properties = {'Type':'MacBook', 'CPU':'i7', 'id'='TeamA1-MBKi7'}
如果
团队B
具有相同的关系,但
id的值不同

将属性
id
移出
Computer
节点并移动到关系属性中是否正确

e、 g


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

(:Team {name: 'Team A'})<-[:USED_BY]-(:Computer {id: 'TeamA1-MBKi7'})-[:IS_A]->(:Model {type:'MacBook', cpu:'i7'})
(:Team{name:'Team A'})(:Model{type:'MacBook',cpu:'i7'})
这将允许多个
计算机
节点共享相同的型号信息

为了回答您更一般的问题,以下是一些想法:

  • Neo4j目前不允许您在关系上创建索引或唯一性约束。(请记住,对于节点:索引或唯一性约束始终与节点标签和节点属性相关联。)因此,如果希望(或可能希望)创建涉及属性的索引或唯一性约束,则应将其放置在节点中
  • 一个关系只能使用一次,以便在两个节点之间建立单个连接。如果您希望(或可能希望)在多个连接中包含相同的属性值,则应考虑将其放入节点。
  • 如果某个属性始终与特定的一对节点相关(并且仅与其中一个节点无关),则它应该是关系属性

  • 有很多方法可以对其进行建模。但是要回答你应该怎么做,你能告诉我们更多关于这个ID应该是什么意思吗?好的,一个团队使用一台特定的计算机。其他团队可能使用同一台计算机。
    TeamA1-MBKi7
    是什么意思?
    TeamA1-MBKi7
    只是每个
    团队中使用的唯一参考,用于说明他们对特定
    计算机的使用情况。这个示例只是一个假设的示例,问题实际上是关于何时以及为什么可以在关系中使用属性字段。这个例子只是作为一个理论案例来引发讨论。这个问题实际上是针对何时以及何时不在关系中使用属性。我试图确定您为什么不想使用关系中的属性来描述数据
    
    (:Team {name: 'Team A'})<-[:USED_BY]-(:Computer {id: 'TeamA1-MBKi7'})-[:IS_A]->(:Model {type:'MacBook', cpu:'i7'})