如何用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。存储在数据库中的对象有点脱水(即没有行为的对象数据)到文档中。
您将面临的挑战:
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).
之间的映射
潜在非结构化(或松散结构化)文档: 文档数据库对于文档的内容非常灵活,完全允许混合对象不相关的 class 进入同一个文档集合。此外,文档的 fields/properties/members 可能是动态的和演变的。然而在实践中,集合通常包含相似的对象,这些对象主要在字段方面有所不同(例如,承认隐式 classes 的存在)。 Documents may even be validated according to a schema 以确保必要时的一致性。
UML classes 基于强类型,而文档中的类型与其内容的其余部分一样灵活(例如,字段 from
可以是日期 2000-04-02
在一个文档中或字符串 "a long time ago"
在另一个文档中)。
所以在开始之前,你需要想好映射策略。我的建议是将 UML 重点放在对象模型的设计上,并将文档视为相关文档的方便分组(DDD aggregates 在这方面可能有所帮助)。以下经验法则可能有助于建模:
- 联接(例如独立文档之间的链接)将由关联表示。
- 对象与其他对象的系统分组,可能表明存在某种更强的关系,例如 UML 组合。
- 不同文档的字段将用可选属性(多重性
0..1
或 0..*
)或封闭对象的 generalisation/specialization 表示,具体取决于解释的逻辑变化。
我是 NoSQL 使用的初学者,目标是构建一个类似 uber 的数据库。是否可以使用 UML 绘制 CouchDB 数据库(面向文档),特别是如何进行连接?或者是否有另一种更适合 NoSQL 数据库建模的替代方案?
您可以使用 UML class 图 对应用程序域的实体和聚合进行建模,而不管实现技术如何。 您还可以为使用 NoSQL database, and in particular document stores 的更具体的实现建模,例如 CouchDB。存储在数据库中的对象有点脱水(即没有行为的对象数据)到文档中。
您将面临的挑战:
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).
之间的映射潜在非结构化(或松散结构化)文档: 文档数据库对于文档的内容非常灵活,完全允许混合对象不相关的 class 进入同一个文档集合。此外,文档的 fields/properties/members 可能是动态的和演变的。然而在实践中,集合通常包含相似的对象,这些对象主要在字段方面有所不同(例如,承认隐式 classes 的存在)。 Documents may even be validated according to a schema 以确保必要时的一致性。
UML classes 基于强类型,而文档中的类型与其内容的其余部分一样灵活(例如,字段
from
可以是日期2000-04-02
在一个文档中或字符串"a long time ago"
在另一个文档中)。
所以在开始之前,你需要想好映射策略。我的建议是将 UML 重点放在对象模型的设计上,并将文档视为相关文档的方便分组(DDD aggregates 在这方面可能有所帮助)。以下经验法则可能有助于建模:
- 联接(例如独立文档之间的链接)将由关联表示。
- 对象与其他对象的系统分组,可能表明存在某种更强的关系,例如 UML 组合。
- 不同文档的字段将用可选属性(多重性
0..1
或0..*
)或封闭对象的 generalisation/specialization 表示,具体取决于解释的逻辑变化。