2012-03-21 7 views
1

Я пишу веб-приложение для социальных сетей с couchdb в качестве backend. В настоящее время я поддерживаю пользовательские профили как документы JSON.Лучший способ моделирования отношений freindship в couchdb

Мое приложение имеет функцию дружбы, когда один пользователь будет запрашивать другого пользователя и после принятия дружбы торжественно. Помимо дружбы есть односторонние отношения, называемые «последующими» отношениями.

Я думал о создании подключения док

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

Это не смотрит прямо на меня вообще. Поскольку существует связь между двумя точно подобными объектами (пользователями в этом случае), я не худею, модель должна пытаться различать источник и цель.

ответ

1

Тот факт, что связь может быть (или всегда) симметричной, не означает, что она обязательно должна быть смоделирована как одна логическая связь. Я думаю, что это может быть более общим, чтобы моделировать возможность, а затем предотвратить односторонние дружеские отношения в вашем приложении, если вы этого желаете.

В этом случае для каждого пользователя у вас может быть множество пользователей, которых они считают своим другом (одним -> многими). Вы могли бы сохранить копию (или кеш), независимо от того, симметрична она или нет для каждого из этих объектов отношений, чтобы сделать ее более масштабируемой.

Грубый пример того, как пользовательский объект может выглядеть:

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

Операции на этих групп пользователей, например, пересечения (общие друзья), было бы намного проще, поскольку они были доступны непосредственно из пользовательского объекта.

+0

В этом случае удаление дружбы означает 2 обновления, правда? и с друзьями вы обращаетесь к функции запроса дружбы. ? – kilianc

Смежные вопросы