对于像MongoDB这样的NoSQL数据库,其等效的ERD是什么?
看起来你在Quora上问了一个类似的问题。
就像在那里提到的一样,ERD只是你想要存储的数据和数据之间关系的映射。
你仍然可以使用MongoDB制作ERD,因为你仍然想要跟踪数据和关系。最大的区别在于MongoDB没有连接,因此当你将ERD转换为实际架构时,你必须对如何实现关系做出一些具体决策。
特别是,在决定如何实际存储这些数据时,你需要进行"嵌入vs引用"的决策。关系仍然被允许,只是不被强制执行。MongoDB的许多包装器实际上提供了跨集合查找以抽象一些这种复杂性。
即使MongoDB不强制执行模式,也不建议完全随意进行。建模你希望在系统中拥有的数据仍然是一个非常好的想法,这就是ERD所提供的。
所以我猜相当于ERD的是ERD?
我不知道有什么标准的方法可以绘制面向文档的“模式”。
我确定你可以使用ERD来映射出你的模式,但是由于文档数据库并不真正支持--或者更重要的是强制执行--数据之间的关系,它只会像你的代码一样有用,如果你的代码有纪律地内部执行这些关系。
MongoDB支持“连接”,但不是SQL中INNER JOIN(默认SQL连接)的意义。虽然“连接”的概念通常与SQL相关联,但MongoDB具有聚合框架及其数据处理管道阶段。$lookup管道阶段用于创建SQL中LEFT JOIN的等效项。也就是说,关系左侧的所有文档都将通过管道,以及关系右侧的任何相关文档。这些文档被修改以包括关系作为新文档的一部分。
因此,我认为实体关系图在MongoDB中确实有一定的作用。文档在数据库中肯定彼此相关,我们应该有这些关系的可视化,包括基数关系,例如完全参与、部分参与、弱/强实体等。
当然,MongoDB还引入了嵌入式文档和引用文档的概念,因此我认为它为ERD模型增加了额外的特色。我肯定希望看到嵌入和引用关系在可视化图表中得到映射。
剩下的问题是什么?NodeJS 的 Mongoose 有什么东西可用?Ruby 的 Mongoid 呢?等等。如果你查看它们对应的 ORM(对象关系映射器)的仓库,你会发现它们都有 ERD。但就它们的完整性而言,也许还有很多需要改进的地方,开源社区欢迎作出贡献。