首页 > 解决方案 > 密码多关系或两个节点之间关系的属性

问题描述

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

现在,我将用户角色保存在名为 MEMBER_OF_GROUP 关系的类型上的列表属性中。成员MEMBER在此列表中,这也适用于创建者和管理员,因此作为组的创建者、管理员和组成员的用户在与组的关系的类型列表中具有MEMBER, ADMIN,CREATOR如下图示例。 第一个设计模板 在这种设计中,很难在组中找到用户的角色,因为我首先需要检查关系是否存在,然后检查该角色是否在类型属性中。

我可以重新设计 db 并为每个角色添加 3 个关系关系MEMBER_IN_GROUP, CREATOR_OF_GROUP, ADMIN_OF_GROUP. 哪个设计更好?两个节点之间有多重关系或添加一个节点和一个属性来保存角色?多重关系可能会导致任何问题吗?这个问题有更好的设计吗?

标签: neo4jcypher

解决方案


如果您要不断寻找特定角色,我会看到拥有多种关系的更多好处。遵循 rel 比遍历数组属性要快得多,属性物理存储在与关系和节点不同的位置,因此 Neo4j 需要做一些额外的工作才能访问它。

作为一般建议,在进行建模时,最好看看您将如何查询数据库以及对如何编写它们的性能影响。如果您想了解有关 Neo4j 如何存储数据的详细信息,请搜索其“原生图”技术概念。https://neo4j.com/blog/native-vs-non-native-graph-technology/

您可以在本书的第 3 章找到更多关于使用 Neo4j 建模图形数据库的技巧:https ://neo4j.com/graph-databases-book/


推荐阅读