我最近遇到了以下两个已经回答的问题:
简而言之,这些问题讨论了在PouchDB(不是 CouchDB)中将数据拆分到不同数据库/“表”中的可能性。 但是,对于最佳实践解决方案,答案并不令人满意。
在第一个问题的示例之后,用户希望找到一种方法来将其数据库结构为三个“表”(例如在MySQL中):
提供的解决方案是使用“关系袋”:
查看此插件 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);
});