我刚刚阅读了名为Denormalizing Your Data Is Normal的Firebase博文,我要求澄清。
在考虑因素段落之前,我一直在使用它。具体来说,以下内容:
“评论的修改很简单:只需将/ comments下的评论值设置为新内容。要删除,只需删除/ comments中的评论 - 并且每当您在代码中的其他地方遇到评论ID时存在于/ comments中,您可以假设它已被删除并正常进行“
对于修改,为什么我不必修改存储在/ links和/ users下的重复注释?
对于删除,我是否正确理解,一旦删除注释,我必须在所有阅读逻辑中使用逻辑来交叉检查/注释,以防它被删除?
谢谢!
答案 0 :(得分:5)
博客文章中详述的结构不存储重复的注释。我们会在/comments
下存储一次评论,然后将这些评论的name
存储在/links
和/users
下。这些函数用作指向实际注释数据的指针。
考虑帖子中的示例结构......
{
users: {
user1: {
name: "Alice",
comments: {
comment1: true
}
},
},
comments: {
comment1: {
body: "This is awesome!",
author: "user1"
}
}
}
请注意,实际评论数据仅存储一次。
如果我们修改/comments/comment1
,我们无需更新任何其他内容,因为我们只会在name
和/links
下存储评论的/users
,而非实际评论内容。
如果我们删除/comments/comment1
,则会删除评论数据的唯一存在。但是,我们仍然在comment1
下对/users/user1/comments
进行了这些“悬空”引用。
想象一下,我们删除了/comments/comment1
,当我们尝试加载Alice的评论时,我们可以看到comment1
不再存在。然后我们的应用程序可以通过以下方式做出相应的反应:a)删除引用或b)忽略引用而不是试图显示已删除的注释。