2012-03-21 2 views
1

나는 couchdb를 백엔드로 사용하여 소셜 네트워킹 웹 앱을 작성 중이다. 현재 사용자 프로필을 JSON 문서로 유지 관리하고 있습니다.couchdb에서 freindship 관계를 모델링하는 가장 좋은 방법

내 앱은 한 사용자가 다른 사용자를 요청할 때 우정 기능을 제공하며 우정은 엄숙합니다. 우정 외에도 "팔로우"관계라는 편도 관계가 있습니다.

나는이 전혀 나에게 잘 보이지 않는 연결 문서

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

을 만들 생각했다. 관계가 정확히 비슷한 엔티티 (이 경우 사용자) 사이에 존재하므로 필자는 모델을 원본과 대상을 구별해야합니다.

답변

1

관계가 항상 대칭이 될 수 있다는 사실은 반드시 하나의 논리적 관계로 모델링되어야한다는 것을 의미하지는 않습니다. 나는 둘 중 하나의 가능성을 모델링 한 다음, 원할 경우 원 웨이 우정을 방지하는 것이 더 일반적이라고 생각합니다.

각 사용자의 경우 친구로 생각할 수있는 일련의 사용자가있을 수 있습니다 (1 -> 다수). 이 관계 오브젝트 각각에 대해 대칭인지 여부에 대한 사본 (또는 캐시)을 저장하여 확장 성을 향상시킬 수 있습니다.

사용자 개체가 어떤 식으로 실행되는지의 거친 예 : 사용자의 다음 세트에

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

운영, 예를 들어, 교차점 (공통점)은 사용자 객체에서 직접 액세스되기 때문에 훨씬 쉽습니다.

+0

우정을 제거하면 2 개의 업데이트가 발생합니다. 맞습니까? friendsBack과 우정 요청 기능을 처리하고 있습니다. ? – kilianc

관련 문제