图建模(社交网络)

时间:2020-01-30 02:17:27

标签: graph neo4j

我正在学习建立社交网络的图形。我被困于尝试代表三个节点的关系,让我解释一下。

我有(user_a)邀请(user_b)参加(活动)。我可以这样建模: (user_a)-[invites]->(user_b)-[wasInvitedTo]->(event)

但是对于这种模型,我无法完全了解,因为user_b会被许多用户邀请参加许多活动。我知道(user_a)邀请(user_b),但我不知道参加哪个活动,另一方面,我知道(user_b)被邀请参加(event),但我不知道是谁邀请了他。 一个案例研究是当我尝试通知(用户a)(user_b)已邀请(事件)。

我在解释自己吗?很难解释这一点,而且如果不使用我的主要语言也很难解释。

我可以采用的唯一解决方案是在关系中设置ID: (user_a)-[邀请{to:event_id}]->(user_b)-[wasInvitedTo {from:user_a_id]->(event) 但是我认为这不是一个好的解决方案。

感谢您的时间!

1 个答案:

答案 0 :(得分:1)

欢迎堆栈溢出!

在这种情况下,我可能想提取一个“邀请”概念作为图中的一个节点(此处为绿色编号的节点):

MERGE (a: User { name: 'Anne' })
MERGE (b: User { name: 'Bob' })
MERGE (c: User { name: 'Chris' })
MERGE (d: User { name: 'Diane' })
MERGE (e: Event { name: 'The Big Party' })
MERGE (i: Invitation)
MERGE (a)-[:CREATED]->(i)
MERGE (i)-[:SENT_TO]->(b)
MERGE (i)-[:SENT_TO]->(c)
MERGE (i)-[:SENT_TO]->(d)
MERGE (i)-[:RELATES_TO]->(e)
RETURN *

enter image description here

一个 User 可以通过创建新的 Invitation 节点邀请多个其他 Users 参加多个 Events 。他们可以为同一个 Event 创建多个 Invitations ,例如,如果他们想为一组 Users 使用不同的文本或图像。

您还可以将邀请本身的元数据挂起,例如发送日期,文本/图像等。