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

How to draw a NoSQL database (document oriented) with UML?

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

您可以使用 UML class 图 对应用程序域的实体和聚合进行建模,而不管实现技术如何。 您还可以为使用 NoSQL database, and in particular document stores 的更具体的实现建模,例如 CouchDB。存储在数据库中的对象有点脱水(即没有行为的对象数据)到文档中。

您将面临的挑战:

  1. document world and the object world: a document may contain several related objects (no joins needed), as well as links to other objects (see also embedded/nested document vs. document references).

    之间的映射
  2. 潜在非结构化(或松散结构化)文档: 文档数据库对于文档的内容非常灵活,完全允许混合对象不相关的 class 进入同一个文档集合。此外,文档的 fields/properties/members 可能是动态的和演变的。然而在实践中,集合通常包含相似的对象,这些对象主要在字段方面有所不同(例如,承认隐式 classes 的存在)。 Documents may even be validated according to a schema 以确保必要时的一致性。

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

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

  • 联接(例如独立文档之间的链接)将由关联表示。
  • 对象与其他对象的系统分组,可能表明存在某种更强的关系,例如 UML 组合。
  • 不同文档的字段将用可选属性(多重性 0..10..*)或封闭对象的 generalisation/specialization 表示,具体取决于解释的逻辑变化。