如何用UML绘制NoSQL数据库(面向文档)



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

您可以使用UML类图对应用程序域的实体和聚合进行建模,而不考虑实现技术。您还可以对使用NoSQL数据库的更具体的实现进行建模,特别是对CouchDB等文档存储进行建模。存储在数据库中的对象有点脱水(即没有其行为的对象数据(到文档中。

您将面临以下挑战:

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

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

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

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

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

最新更新