我正在编写一个社交网络应用程序,其中couchdb作为后端。目前,我将用户配置文件维护为JSON文档。
我的应用程序具有友情功能,当一个用户请求其他用户并且在接受时友谊会被庄严化。除了友谊之外,还有一种称为“跟随”关系的方式关系。
我想到了创建连接文档
{
source_user:'',
target_user:'',
source_follows_target:'',
target_follows_source:'',
..Similarly for friendship...
}
这根本不适合我。由于两个完全相似的实体(在这种情况下是用户)之间存在关系,所以我不会对模型进行细化,应该尝试区分源和目标。
答案 0 :(得分:1)
关系可以(或总是)对称的事实并不意味着必须将其建模为一个逻辑关系。我认为对这两者的可能性进行建模可能更为通用,如果您愿意,可以在您的应用程序中阻止单向友谊。
在每种情况下,对于每个用户,您可能拥有一组他们认为是他们的朋友的用户(一个 - >多个)。您可以在每个关系对象上存储它是否对称的副本(或缓存),以使其更具可伸缩性。
用户对象外观的粗略示例:
{
"userId": 1,
"friends": [{"userId": 2, "friendsBack": true | false}, ...]
}
对这些用户组的操作,例如交叉点(共同的朋友),因为直接从用户对象访问它们会更容易。