如何在neo4j中建模社交网络连接?

时间:2013-08-14 15:16:24

标签: database graph neo4j

考虑如何为Side项目建模一个简单的图形。

项目的用户将能够添加社交网络,以便他们可以找到具有社交信息的其他用户。

鉴于neo4j的架构,我不熟悉,是正确的方法:

  1. 每个社交网络的不同类型(例如,twitter,LinkedIn)和用户关系 - > has_twitter_account / user - > has_linkedin_account及相关密钥
  2. 一种类型(SocialMediaAccount)与用户 - > has_socialmedia_acct与相关键的关系以更通用的方式和社交网络名称的属性
  3. 在每个用户实体下添加社交网络作为属性?
  4. 我还没有想到的其他东西?
  5. 我倾向于排名第一,但鉴于我是新来者,我想确保这不是一种反模式,或者让我后来痛苦。

1 个答案:

答案 0 :(得分:2)

不确定我是否正确理解了您的要求,但总的来说,将现实世界的实体建模为事物之间的节点和关系,很自然地将其建模为关系。

在您的情况下,我会选择以下两种方式之一,具体取决于您对社交媒体帐户的处理程度。

1)每个社交媒体的节点,例如(LinkedIn),(Twitter),(Facebook)。然后是单个关系类型,称之为HAS_ACCOUNT,它将(用户)节点链接到帐户。例如:

(user1)-[:HAS_ACCOUNT]->(LinkedIn)

2)如果您发现在HAS_ACCOUNT关系中存储了太多属性,或者您认为它应该与其他内容相关联(例如社交媒体帐户之间的链接),请为每个帐户创建一个节点具有

(user1)-[:HAS_ACCOUNT]->(user1LinkedInAccount)-[:IS_ACCOUNT]->(LinkedIn)

这样,您的模型更灵活,您可以将用户帐户与不同类型的关系链接在一起。假设user1在Twitter上关注user2:

(user1TwitterAccount)-[:IS_LINKED_TO]->(user2TwitterAccount)

希望它有意义。