两个节点之间的关系的多重密码关系或属性

时间:2018-08-13 05:55:37

标签: neo4j cypher

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

现在,我将用户角色保存在名为MEMBER_OF_GROUP的关系上名为type的列表属性中。成员在此列表中有MEMBER,这也适用于创建者和管理员,因此,作为组,管理员和组成员的创建者的用户具有MEMBERADMIN,{{ 1}}在与组的关系上的类型列表中,例如下面的图像波纹管。 Template of first design 在这种设计中,很难找到用户在组中的角色,因为我首先需要检查是否存在关系,然后再检查该角色是否在type属性中。

我可以重新设计数据库,并为每个角色添加3个关系CREATORMEMBER_IN_GROUPCREATOR_OF_GROUP。哪个设计更好?两个节点之间有多重关系,或者添加一个节点和一个属性来保存角色?多重关系会导致任何问题吗?有什么更好的设计来解决这个问题?

1 个答案:

答案 0 :(得分:0)

如果您要不断寻找特定的角色,我会发现拥有多种关系会带来更多好处。遵循rel比遍历数组属性要快得多,属性在物理上存储在与关系和节点不同的位置,因此Neo4j需要付出额外的努力才能访问它。

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

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