首页 > 解决方案 > 如何使用 UML 绘制 NoSQL 数据库(面向文档)?

问题描述

我是使用 NoSQL 的初学者,旨在构建一个类似 uber 的数据库。是否可以使用 UML 绘制 CouchDB 数据库(面向文档),特别是如何进行连接?或者还有其他更适合 NoSQL 数据库建模的替代方案吗?

标签: jsondatabasenosqlumluber-api

解决方案


无论实现技术如何,您都可以使用UML 类图对应用程序域的实体和聚合进行建模。您还可以为使用NoSQL数据库的更具体的实现建模,特别是 CouchDB 等文档存储。存储在数据库中的对象是一种脱水的(即没有它们的行为的对象数据)成一个文档。

您将面临以下挑战:

  1. 文档世界和对象世界之间的映射:一个文档可能包含多个相关对象(不需要连接),以及到其他对象的链接(另请参阅嵌入/嵌套文档与文档引用)。

  2. 潜在的非结构化(或松散结构)文档:文档数据库对于文档的内容非常灵活,并且完全允许将完全不相关的类的对象混合到同一个文档集合中。此外,文档的字段/属性/成员可能是动态的和不断发展的。然而,在实践中,集合通常包含类似的对象,这些对象主要在字段方面有所不同(例如,承认隐式类的存在)。如果需要,甚至可以根据模式验证文档以确保一致性。

  3. UML 类基于强类型,而文档中的类型与其内容的其余部分一样灵活(例如,一个字段from可以是一个文档中的日期2000-04-02或另一个文档中的字符串"a long time ago")。

因此,在开始之前,您需要考虑映射策略。我的建议是将 UML 中的重点放在对象模型的设计上,并将文档视为相关文档的方便分组(DDD 聚合可能在这方面有所帮助)。以下经验法则可能有助于建模:

  • 连接(例如独立文档之间的链接)将由关联表示。
  • 对象与其他对象的系统分组,可能表明存在某种更强的关系,例如 UML 组合。
  • 根据解释变化的逻辑,可以使用可选属性(多重性0..1或)或封闭对象的泛化/专业化来表示因文档而异的字段。0..*

推荐阅读