0

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

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

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

  1. 每个社交网络的不同类型(例如,twitter、LinkedIn)和用户关系 --> has_twitter_account / user --> has_linkedin_account 与相关键
  2. 一种类型(SocialMediaAccount)与用户-> has_socialmedia_acct 与相关键的关系以更通用的方式和社交网络名称的属性
  3. 在每个用户实体下添加社交网络作为属性?
  4. 还有什么我没有想到的?

我倾向于排名第一,但鉴于我是新手,我想确保这不是反模式或让我以后痛苦。

4

1 回答 1

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)

希望这是有道理的。

于 2013-08-14T15:49:47.907 回答