2012-03-21 3 views
1

私はバックエンドとしてcouchdbを使ってソーシャルネットワーキングウェブアプリを書いています。現在、私はユーザープロファイルをJSONドキュメントとして管理しています。couchdbでfreindship関係をモデル化する最良の方法

私のアプリは、あるユーザが他のユーザを要求し、受け入れたときに友情が厳粛になると友情機能があります。友情に加えて、「フォロー」関係と呼ばれる一方向の関係もあります。

私は、これは全く私には、右を見ていない

{ 
source_user:'', 
target_user:'', 
source_follows_target:'', 
target_follows_source:'', 
..Similarly for friendship... 
} 

接続ドキュメントを作成すると思いました。この関係は2つのまったく似たエンティティ(この場合はユーザー)の間に存在するため、モデルをソースとターゲットの間で区別する必要がありません。

答えて

1

関係が常に対称である(または常にそうである)という事実は、必ずしも1つの論理的関係としてモデル化されなければならないということを意味しない。私はどちらかの可能性をモデル化することがより一般的かもしれないと思っています。

この場合、各ユーザーには、友人とみなせるユーザーのセットがあります(1 - >多数)。対称的であるかどうかのコピー(またはキャッシュ)をこれらのリレーションシップオブジェクトのそれぞれに格納して、それを少しスケーラブルにすることができます。

ユーザーオブジェクトがどのように見えるかの大まかな例:ユーザーのこれらのセットに

{ 
    "userId": 1, 
    "friends": [{"userId": 2, "friendsBack": true | false}, ...] 
} 

オペレーション、例えば交差点(共通の友人)は、ユーザーオブジェクトから直接アクセスされるため、より簡単になります。

+0

この場合、友情を削除すると2つの更新を意味します、そうですか?友人との友情あなたは友情の要求機能に対処しています。 ? – kilianc

関連する問題