我目前正在学习Firebase / NoSQL数据库建模。我刚结束观看Firebase for SQL developers,但我仍然没有怀疑。
假设我正在创建Instagram风格的应用,用户可以分享他们的照片,每个用户都可以喜欢每张照片。
所以我想实现两件事: 1.知道哪个用户喜欢哪张照片。 (所以只有一个像每个用户的照片) 2.每张照片有多少喜欢。
我当前的数据库如下所示:
{
"images": {
"100": {
"imageUrl": "../../image.png",
},
"101": {
"imageUrl": "../../image.png",
}
},
"users": {
"200": {
"name": "user1"
},
"201": {
"name": "user2"
}
},
"likes": {
"100": 1,
"101": 2
},
"likesPerUser": {
"200": {
"100": "true"
},
"201": {
"100": "true",
"101": "true"
}
}
"imagesPerUser": {
"200": {
"101": "true"
},
"201": {
"100": "true"
}
}
我的问题与计数器有关,计算每张照片有多少喜欢。最好的做法是将它们作为自己的“根”对象(当前模型)或者为照片下的“喜欢”创建键值对(并且对于authorID也可以这样做)?
答案 0 :(得分:1)
This Firebase Sample建议在每个帖子下设置计数器(likes_count
)。并且还有一个带有列表/ lookup的节点(likes
)。像这样:
"images": {
"100": {
"imageUrl": "../../image.png",
"likes_count":2,
"likes":{
"200":true,
"201":true
}
},
"101": {
"imageUrl": "../../image.png",
"likes_count":1,
"likes":{
"201":true
}
}
}
这样您就可以确保每个用户只有一个,因为密钥在Firebase实时数据库节点下必须是唯一的,并且用户ID用作likes_count
节点下的密钥。你也可以知道哪些用户喜欢这张照片,因为他们的uid就在那里。很明显,你可以通过访问柜台看到有多少喜欢照片。