PouchDB中有关SQL-Table-Pendant的最佳实践

时间:2018-08-01 14:19:14

标签: nosql pouchdb document-database

我最近遇到了以下两个已经回答的问题:

简而言之,这些问题讨论了在PouchDB(不是 CouchDB)中将数据拆分到不同数据库/“表”中的可能性。 但是,对于最佳实践解决方案,答案并不令人满意。

在第一个问题的示例之后,用户希望找到一种方法来将其数据库结构为三个“表”(例如在MySQL中):

  1. 用户
  2. 消息
  3. 位置

提供的解决方案是使用“关系袋”:

  

查看此插件   https://github.com/pouchdb-community/relational-pouch。它确实做到了   问什么-创建具有多个表的数据库架构。它通过   有一定的限制。例如,现在没有直接方法可以   在类型上使用查找,即,您需要搜索所有对象,然后   按类型[...]

过滤

但是,由于这具有答案中提到的缺点,因此这似乎不是一个好习惯。在文档内部声明键(例如,“类型”:“用户”)以标识其属于某个“表”会更好吗?然后,您可以使用find()来检索属于该选择器的所有文档。

这里的问题是:该方法可以扩展吗?将所有文档存储在一个数据库中并使用find()会更好,还是建议的答案是一种更好的方法?

或者第二个链接问题的建议答案会更好(将数据拆分到不同的数据库中):

  

在PouchDB中创建其他数据库的唯一实际限制因素(不适用于CouchDB)是,除了使用插件外,没有简单的方法来列出现有数据库。这并不一定是真正的限制-只是意味着您需要记住您已经创建了哪些数据库(您可能不应该以编程方式创建随机命名的数据库...但这反而是很糟糕的设计。 -))

使用这种方法, 像在关系数据库中一样,以后很难链接数据吗? 因此,这样做会不会更好呢?可以将所有内容都放在一个数据库中,并在指定的键/选择器上使用find()

还有最后一个问题 :使用文档驱动的数据库时,这种“表”方案根本不是一个坏习惯吗?给定上面的示例,将属于用户的所有数据(也意味着他的消息和职位)放入单个文档中似乎更为合理。但是,这是否可以扩展到将数据拆分到不同的数据库中一样令人怀疑。

谢谢您的输入!


以“ type”作为选择键的“ all-in-one”数据库示例:

{
"_id": "abcd",
"type": "user",
"name": "TestUser",
"_rev": "1234123523235234246"
},    {
"_id": "efgh",
"type": "messages",
"message": "TestMessage",
"_rev": "1234123523235234246"
},    {
"_id": "ijkl",
"type": "positions",
"position": "TestPosition",
"_rev": "1234123523235234246"
}

用于查找消息类型的文档的示例代码:

db.find({
  selector: {type: 'messages'},
  fields: ['_id', 'type'],
  sort: ['name']
}).then(function (result) {
  // handle result
}).catch(function (err) {
  console.log(err);
});

0 个答案:

没有答案