Firebase数据库结构-非规范化数据?

Firebase数据库结构-非规范化数据?,firebase,firebase-realtime-database,nosql,Firebase,Firebase Realtime Database,Nosql,最近我读了很多关于nosql数据库的书。我得到的经验法则是基于我们的视图构造数据(当然,这取决于用例) 现在,假设我们有一个社交应用程序,用户有一个个人资料,但他也创建帖子,我们必须将它们存储在数据库中 因此,我看到一些开发人员选择这样做: Posts -----UserID -----------PostID -----------------username: John -----------------profileImage: https://... -----------------p

最近我读了很多关于nosql数据库的书。我得到的经验法则是基于我们的视图构造数据(当然,这取决于用例)

现在,假设我们有一个社交应用程序,用户有一个个人资料,但他也创建帖子,我们必须将它们存储在数据库中

因此,我看到一些开发人员选择这样做:

Posts
-----UserID
-----------PostID
-----------------username: John
-----------------profileImage: https://...
-----------------posted_photo: https://...
这完全符合基于视图的结构。我们将进入POST和我们的用户ID,我们可以获得视图所需的所有数据。现在我的问题是,当用户发了10万篇帖子,他决定改变他的个人资料照片时会发生什么。到目前为止,他的所有帖子都包含了他的旧照片,所以现在,我们必须编写一个方法,循环浏览100K篇帖子(或者他所有的帖子),并更新他的照片。两个小时后,他决定“不,我不喜欢这张照片,我要把它改回去”,我们还要再问10万个问题


这(非规范化数据)怎么样?当然,这很简单,很简单,但是我们必须进行大量的查询才能更改一张个人资料照片。怎么处理这件事呢

我将用户数据存储在一个地方,并将userID设置为post属性

posts:
    userID:
        postID:
            userID: 'user1',
            attachedImageURL: 'http:..',
            message: 'hey',
            reblogID: 'post4',
            type: 'audio|poll|quote'
users:
    user1:
        name: 'john',
        profileImage: 'http..'

它需要对Firebase再进行一次查询,以检索用户的配置文件数据,但这是一个很好的解决方法。这实际上取决于你想如何使用这些数据。

这正是我所想的方法。好的,不过我有个问题要问你。如果你有超过一种类型的帖子,你会如何存储?例如,你可以有图片帖子、视频帖子、文本帖子、民意调查帖子等。所有这些帖子都可以有评论、喜欢、重播。你可以将数据存储在帖子中:)我更新了我的答案你误读了:)我主要关心的是我有9种不同类型的帖子(视频、图片、普通文本、民意调查、引用等)我不知道如何构造它,这样它就不会太嵌套。。。像Posts->AudioPosts->UserID->PostID(…post info…)一样,您可以在post中设置属性
type
,然后使用
orderByChild('type')
只获取您想要的类型:)我已经更新了我的答案,但这不是有问题吗?例如,如果您只想显示音频帖子,那么这将下载所有帖子(不管类型如何),并仅过滤音频帖子?