MongoDB的ERD替代方案是什么?

52

对于像MongoDB这样的NoSQL数据库,其等效的ERD是什么?


那么我猜我的修订问题应该是:是否有一种工具可以设计MongoDB数据库的模式? - Catalin Braescu
你也应该看一下这个:http://docs.mongodb.org/manual/core/data-modeling/ - Gabriel C
6个回答

49

看起来你在Quora上问了一个类似的问题。

就像在那里提到的一样,ERD只是你想要存储的数据和数据之间关系的映射。

你仍然可以使用MongoDB制作ERD,因为你仍然想要跟踪数据和关系。最大的区别在于MongoDB没有连接,因此当你将ERD转换为实际架构时,你必须对如何实现关系做出一些具体决策。

特别是,在决定如何实际存储这些数据时,你需要进行"嵌入vs引用"的决策。关系仍然被允许,只是不被强制执行。MongoDB的许多包装器实际上提供了跨集合查找以抽象一些这种复杂性。

即使MongoDB不强制执行模式,也不建议完全随意进行。建模你希望在系统中拥有的数据仍然是一个非常好的想法,这就是ERD所提供的。

所以我猜相当于ERD的是ERD


MongoDb的聚合框架中有$lookup功能,可以实现连接操作。 - Calypso

3
你也可以使用UML类图。

3
我已经思考了相同的问题很长一段时间。我得出了以下结论:如果NoSQL数据库通常是无模式的,那么你实际上没有一个可以在图表中说明的“模式”。
因此,我认为你应该采取“以示例为导向”的方法。你可以画一些思维导图来说明你的数据在存储在NoSQL数据库(如MongoDB)中时会是什么样子。
由于这些数据库非常动态,所以你还可以创建一些派生的思维导图,展示今天的数据可能会如何随时间演变。
也可以看看这个话题。 混淆NoSQL设计

3

Moon Modeler支持MongoDB架构设计,允许用户定义包含嵌套结构的图表。


2

我不知道有什么标准的方法可以绘制面向文档的“模式”。

我确定你可以使用ERD来映射出你的模式,但是由于文档数据库并不真正支持--或者更重要的是强制执行--数据之间的关系,它只会像你的代码一样有用,如果你的代码有纪律地内部执行这些关系。


0

MongoDB支持“连接”,但不是SQL中INNER JOIN(默认SQL连接)的意义。虽然“连接”的概念通常与SQL相关联,但MongoDB具有聚合框架及其数据处理管道阶段。$lookup管道阶段用于创建SQL中LEFT JOIN的等效项。也就是说,关系左侧的所有文档都将通过管道,以及关系右侧的任何相关文档。这些文档被修改以包括关系作为新文档的一部分。

因此,我认为实体关系图在MongoDB中确实有一定的作用。文档在数据库中肯定彼此相关,我们应该有这些关系的可视化,包括基数关系,例如完全参与、部分参与、弱/强实体等。

当然,MongoDB还引入了嵌入式文档和引用文档的概念,因此我认为它为ERD模型增加了额外的特色。我肯定希望看到嵌入和引用关系在可视化图表中得到映射。

剩下的问题是什么?NodeJS 的 Mongoose 有什么东西可用?Ruby 的 Mongoid 呢?等等。如果你查看它们对应的 ORM(对象关系映射器)的仓库,你会发现它们都有 ERD。但就它们的完整性而言,也许还有很多需要改进的地方,开源社区欢迎作出贡献。

https://www.npmjs.com/package/mongoose-erd

https://rubygems.org/gems/railroady


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