我正在考虑启动我的第一个CouchDB项目并来自ORM背景我担心如何创建可能难以维护的文档。
例如,如果我有以下型号:
A * --->(1)B
这意味着每个A对象都有一个B对象,并且有许多A可以共享一个B对象。在这种情况下,A到B中有指针/外键。
我可以创建一个包含所有A数据和B数据的文档。但是,我遇到的问题是,如果在稍后阶段(创建10000个文档之后),我可能需要更改一些数据,这意味着我必须更新所有文档。
在ORM /规范化数据库世界中,我会简单地更新B,所有我的引用现在都是数据库。
如何在CouchDB中处理这个问题,或者NoSQL方法不适合这些类型的情况?
JD
答案 0 :(得分:5)
这个问题的一般答案:这个问题没有一般性答案。
关键是在NoSQL中,数据结构不是由数据决定的,而是由数据结构必须支持的查询决定的。因此,NoSQL方法不是对1:N或M:N关联问题的每个实例使用相同的模式,而是根据您的特定需求使用不同的模式。例如,这些可能是:
一般来说,我的感觉是初学者倾向于“过度嵌入”,但我只能代表MongoDB发言。嵌入是一个强大的功能,但嵌入对象不是“一等公民”,因此它不应该用作每个1:n关系的替代品。仅限于某些人:)