Neo4j 两节点间关系的Cypher多重关系或性质

Neo4j 两节点间关系的Cypher多重关系或性质,neo4j,cypher,Neo4j,Cypher,我设计了一个neo4j数据库,这个数据库有两个标签用户和组。每个用户都可以是组中的成员或管理员。我也需要保存组的创建者。因此,对于组中的用户,我有3个可能的角色 现在,我将用户角色保存在一个名为type的列表属性中,该属性位于名为MEMBER\u OF_GROUP的关系中。成员在此列表中有member,这也适用于创建者和管理员,因此作为组创建者、管理员和组成员的用户在与组的关系的类型列表中有member,admin,creator,如下图所示。 在这种设计中,很难在组中找到用户的角色,因为我首先

我设计了一个neo4j数据库,这个数据库有两个标签用户和组。每个用户都可以是组中的成员或管理员。我也需要保存组的创建者。因此,对于组中的用户,我有3个可能的角色

现在,我将用户角色保存在一个名为type的列表属性中,该属性位于名为MEMBER\u OF_GROUP的关系中。成员在此列表中有
member
,这也适用于创建者和管理员,因此作为组创建者、管理员和组成员的用户在与组的关系的类型列表中有
member
admin
creator
,如下图所示。 在这种设计中,很难在组中找到用户的角色,因为我首先需要检查关系是否存在,然后检查该角色是否在类型属性中


我可以重新设计数据库并为每个角色添加3个关系a关系
组中的成员
组的创建者
组的管理员
。哪种设计更好?在两个节点之间具有多重关系,或者添加一个节点和一个属性以保存角色?多重关系会导致任何问题吗?有没有更好的设计来解决这个问题?

如果你一直在寻找某个特定的角色,我认为拥有多重关系会带来更多好处。遵循rel比迭代数组属性快得多,属性物理上存储在与关系和节点不同的位置,因此Neo4j需要做一些额外的工作才能访问它

作为一般建议,在建模时,最好看看您将如何查询数据库,以及性能对如何编写数据库的影响。如果您需要有关Neo4j如何存储数据的详细信息,请搜索其“本机图形”技术概念

您可以在本书第3章中找到更多关于使用Neo4j建模图形数据库的提示: