何时在NoSQL中创建新文档

3

我刚刚开始接触NoSQL(在我的情况下是CouchDB),似乎无法回答我认为应该是一个简单问题的问题,即创建新文档与将数据附加到现有文档之间的常见做法。

我目前每个用户都有一个数据库(这意味着我只能向用户提供他们拥有的数据访问权限)。

因此,在顶层上,我的CouchDB看起来像:

  • UserA_db
  • UserB_db

如果我有一个简单的笔记本应用程序,每个用户可以拥有1个或多个笔记本,每个笔记本包含1个或多个注释。

想法是您每个笔记本添加一个文档,如下所示:

  • UsersA_db
    • NoteBook1_doc = { notes: [ { notebody: 'foo' }, { notebody: 'bar'} ] }
    • NoteBook2_doc = { notes: [ { notebody: 'baz' }, { notebody: 'boo'} ] }

还是说所有内容都是完全扁平的,而不考虑文档是什么、包含什么或与什么相关?

  • UsersA_db
    • NoteBook1_doc = { id: 1 }
    • Note1_doc { id: 1, parentBook: 1, notebody: 'foo' }
    • Note2_doc { id: 2, parentBook: 1, notebody: 'bar' }
    • SomethingCompletelyDifferent_doc { id: 1, text: 'all cows eat grass' }
    • AccountInformation_doc { name: 'Bob', age: 34 }

对象组合几乎总是取决于个人喜好,而非硬性事实。如果您在应用程序本身的对象设计方面拥有更多经验,那么从那里开始并保持数据库结构相似可能是一个不错的主意。 - Joachim Isaksson
1个回答

2
这可能有两种方式,但要记住的一个有用的事实是,在CouchDB中,文档是原子事务的单位。如果所有数据都在一个文档中,则可以对CouchDB中的数据进行原子事务更改。
此外,请记住,CouchDB的“视图”之所以称为“视图”,是因为它们让您以完全一致的状态以不同的方式“查看”数据。视图始终表示您请求它们时数据的时间点快照。视图还可以将数据整理在一起。例如,一个视图可以通过整理单个笔记来显示笔记本。
Joachim说得没错,这是一个判断性的决定,但我个人更倾向于您的第二个选项:每个笔记都是一个文档。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接