0

サイド プロジェクトの単純なグラフをモデル化する方法を考えています。

プロジェクトのユーザーは、ソーシャル ネットワークを追加して、ソーシャル情報を持つ他のユーザーを見つけることができます。

私が慣れていないneo4jのアーキテクチャを考えると、これを行う正しい方法は次のとおりです。

  1. ソーシャル ネットワーク (twitter、LinkedIn など) ごとに異なるタイプと、関連するキーを持つ user --> has_twitter_account / user --> has_linkedin_account の関係
  2. 1 つのタイプ (SocialMediaAccount) とユーザー --> has_socialmedia_acct 関連するキーとの関係 より一般的な方法で、ソーシャル ネットワークの名前の属性
  3. 各ユーザー エンティティの下に属性としてソーシャル ネットワークを追加しますか?
  4. 私が考えていない他の何か?

私はナンバー 1 に傾いていますが、私が新参者であることを考えると、これがアンチパターンではないか、後で苦労するように設定されていないかを確認したいと考えています。

4

1 に答える 1

2

要件を正しく理解しているかどうかはわかりませんが、一般的に、実世界のエンティティをノードとしてモデル化し、物事間の関係を非常に自然に関係としてモデル化することをお勧めします。

あなたの場合、ソーシャル メディア アカウントをどの程度活用したいかによって、次の 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 に答える