简单的社交网络设计缺陷与图数据库

时间:2015-03-15 07:52:20

标签: neo4j social-networking graph-databases

我正在查看图形数据库和Neo4j。正如所建议的那样,我试图在白纸上绘制一个简单的社交网络图,经过一些草图后,我坚持了一些类似的观点。

起初我设计了一个社交网络,其中用户可以"喜欢" "后" S

(u1:User)-[:LIKED]->(p:Post)<-[:POSTED]-(u2:User)

现在我想通知user2有关类似的操作,并在白皮书上绘制。

(u1:User)-[:LIKED]->(p:Post)<-[:POSTED]-(u2:User)
              |                            ^
              |__________[:NOTIFY]_________|

我不确定它是否清楚,但我只是描绘了一个节点和另一个关系之间的关系,这对于图形数据库是不可能的,至少对于Neo4j而言。所以我决定,Like应该是节点而不是关系。然后我的图表变成了这个。

(u1:User)-[:CREATAD]->(l:Like)-[:BELONGS_TO]->(p:Post)<-[:POSTED]-(u2:User)
                          |                                           ^
                          |__________________[:NOTIFY]________________|

现在一切都好。然后我将注释功能作为关系添加到系统中,但是当涉及通知时,它又变成了一个节点。当我添加&#34;喜欢评论&#34;功能,&#34;喜欢评论&#34;首先看起来他们是关系,但是当涉及通知时他们又变成了节点。

一般来说,在某些时候,我发现自己在节点和另一种关系之间绘制关系。我对此的解决方案感觉就像我将自然看起来像关系的实体转变为节点。这让我想到我在决定什么应该是一个节点以及什么应该是一个关系时遇到一些问题。

所以我的问题是,除了我之外的其他任何人是否属于节点与其他关系之间的&#34;关系&#34; 问题,如果是这样,你如何解决?

1 个答案:

答案 0 :(得分:2)

这一切都取决于你的用例,在很多情况下,简单的关系就足够了但是如果你想用这个实体或事实做更多的事情你把它变成一个节点,通常事实证明它实际上是相当的该领域的重要概念。

在我们的数据建模类中有一个特定的部分,并且在“图形数据库”一书中对它进行了详细讨论(你可以得到free PDF here)。

如果您不需要详细信息,有时保持原始关系可以快速跨越该中间节点。