NoSQL数据完整性(火力地堡+终极版)(NoSQL data integrity (Firebas

2019-09-28 09:22发布

我看到下面的代码从火力例如应用程序(一个链接 ):

// Write the new post's data simultaneously in the posts list and the user's post list.
var updates = {};
updates['/posts/' + newPostKey] = postData;
updates['/user-posts/' + uid + '/' + newPostKey] = postData;

当您添加一个新的职位,将其写入同一个数据对象分为两个不同的地方。 这似乎有点怪我,因为现在则意味着你要照顾,如果你想更新或删除它们两个完全相同的数据。 我宁愿做这样的事情:

post: {
  id: 1,
  username: 'awesomeMan', // store necessary author's metadata
  title: 'hello',
  body: 'body
}

author: {
  id: 1,
  username: 'awesomeMan',
  email: 'hello@gmail.com',
  posts: {
    1: true // index posts by their ids
  }
}

如果我这样做,这样,我还是有一点数据的重复,因为我存储用户的元数据username后内。 但是,是不是比在两个地方有两个完全相同的数据比较好?

编辑:跟进质询,我想添加Comments资源Posts 。 鉴于这两个选项,哪一个更好,为什么?

选项1。

存储与所有评论postId此路径下:

/post-comments/${postId}

这是征求意见的唯一路径,我们什么也不存入comments/

选项2。

存储评论中comments/并通过IDS索引他们posts

/post/${postId}/comments #only consists of commentIds that belong to this post
/comments/${commentId}
文章来源: NoSQL data integrity (Firebase + Redux)