对于像 MongoDB 这样的 NoSQL 数据库,ERD 的等价物是什么?
6 回答
看起来你在 Quora 上问过类似的问题。
如那里所述,ERD 只是您打算存储的数据以及该数据之间的关系的映射。
您仍然可以使用 MongoDB 创建 ERD,因为您仍然想跟踪数据和关系。最大的区别在于 MongoDB 没有连接,因此当您将 ERD 转换为实际模式时,您必须做出一些关于实现关系的具体决定。
特别是,在决定如何实际存储这些数据时,您需要做出“嵌入还是引用”的决定。关系仍然是允许的,只是没有强制执行。MongoDB 的许多包装器实际上提供了跨集合的查找,以抽象出这种复杂性。
即使 MongoDB 不强制执行模式,也不建议完全随机进行。对您期望在系统中拥有的数据进行建模仍然是一个非常好的主意,这就是 ERD 为您提供的。
所以我想 ERD 的等价物是ERD吗?
您也可以只使用 UML 类图。
我不知道绘制面向文档的“模式”的标准方法。
我确信您可以使用 ERD 来绘制您的模式,但由于文档数据库并不真正支持——或更重要的是强制执行——数据之间的关系,它只会在你的代码被规范在内部强制执行这种关系时才有用.
很长一段时间以来,我一直在思考同样的问题。我得出以下结论:如果 NoSQL 数据库通常是无模式的,那么您实际上并没有“模式”来用图表来说明。
因此,我认为您应该采取“以身作则”的方法。您可以绘制一些思维导图来举例说明您的数据在存储在 MongoDB 等 NoSQL DB 中时的样子。
由于这些数据库非常动态,您还可以创建一些派生的思维导图来展示今天的数据如何随时间演变。
也看看这个话题。
Moon Modeler支持 MongoDB 的模式设计。它允许用户定义具有嵌套结构的图表。
MongoDB 确实支持“连接”,只是不支持 SQL 意义上的 INNER JOIN(默认 SQL 连接)。虽然“连接”的概念通常与 SQL 相关联,但 MongoDB 确实具有聚合框架及其数据处理管道阶段。$lookup 管道阶段用于在 SQL 中创建等效的 LEFT JOIN。也就是说,关系左侧的所有文档以及关系右侧的任何相关文档都将通过管道。修改文档以将关系包括为新文档的一部分。
因此,我假设实体关系图确实在 MongoDB 中发挥作用。文档在数据库中当然是相互关联的,我们应该对这些关系进行可视化,包括基数关系,例如完全参与、部分参与、弱/强实体等。
当然,MongoDB 还引入了嵌入文档和引用文档的概念,因此我认为它为 ERD 模型增添了额外的风味。我当然希望看到在可视图中绘制出的嵌入和引用关系。
剩下的问题是那里有什么?Mongoose for NodeJS 有什么?Ruby 的 Mongoid?等等。如果您检查相应的存储库以获取其相应的 ORM(对象关系映射器),那么您将看到它们有 ERD。但就它们的完整性而言,也许还有很多不足之处,欢迎开源社区做出贡献。