Лучший способ смоделировать дружеские отношения в couchdb - PullRequest
1 голос
/ 22 марта 2012

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

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

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

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

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

1 Ответ

1 голос
/ 22 марта 2012

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...