我在下面提到了db结构,其中用户主数据保存在users
集合中,图像保存在users_slug
集合中,我将users
集合节点密钥保存为{ {1}}集合因此,基本上我将拥有一个主集合和许多子集合,因此我需要基于主表记录节点键(基本上是一对多关系)来获取所有子数据,从而可以基于子表执行CRUD操作在主节点密钥上。
我有2个查询....
1)下面提到的db结构是好的方法吗? (因为我是Firebase的新手,所以进行了很多搜索,但没有找到任何相关内容)
2)如何根据节点密钥对两个集合执行访存?
users_slug
答案 0 :(得分:1)
(如果我正确理解了您的需求),可以通过在每个slug
节点下复制每个用户的user
数据来使数据标准化,如下所示。
这样,您只需要一个查询就可以获取给定用户的所有“子弹”。
如果需要进行一些特定的查询,则可以保留users_slug
节点(即“集合”以使用帖子的词汇表)。 (例如,查询-LSDmLgLW9KgTg1BpsxX
节点-或未来的兄弟姐妹-,但不清楚这个uniqueId是什么。)
去规范化在NoSQL世界中非常普遍,您应该毫不犹豫地复制数据,以优化查询。请注意,要同时写入两个(或多个)节点,为了管理数据一致性,可以使用update()
方法,请参阅文档here和here。
{
"users": {
"-LSDmLO1GyfbumPZPopb": {
"first_name": "test",
"gender": "M",
"last_name": "test123",
"username": "test123"
"slugs": {
"-LSDmLgLW9KgTg1BpsxX": [
{
"new_file_name": "5bfb97e92dbde.jpg",
"original_file_name": "128483.1.jpg"
},
{
"new_file_name": "5bfb97e92dd09.jpg",
"original_file_name": "amit.jpg"
},
....
]
}
},
"users_slug": {
"-LSDmLgLW9KgTg1BpsxX": [
{
"new_file_name": "5bfb97e92dbde.jpg",
"original_file_name": "128483.1.jpg",
"user_id": "-LSDmLO1GyfbumPZPopb"
},
..........
]
}
}
最后,您可以观看有关“ SQL开发人员的Firebase数据库” https://www.youtube.com/playlist?list=PLl-K7zZEsYLlP-k-RKFa7RyNPa9_wCH2s的官方Firebase视频系列,尤其是有关非规范化的第六视频https://www.youtube.com/watch?v=vKqXSZLLnHA&index=7&list=PLl-K7zZEsYLlP-k-RKFa7RyNPa9_wCH2s&t=0s