【问题标题】:How to draw a NoSQL database (document oriented) with UML?如何使用 UML 绘制 NoSQL 数据库(面向文档)?
【发布时间】:2021-08-04 11:25:38
【问题描述】:

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

【问题讨论】:

  • 我投票结束这个问题,因为它与他之前结束的问题中的文本相同,没有任何改变。
  • @qwerty_so 我同意这仍然是一个非常普遍的问题。但是 Emmanuel 听取了我们的 cmets 的意见,并通过澄清他正在考虑的 NoSQL 类型(文档存储)以及他担心的具体问题(如何表示联接)确实缩小了他之前问题的范围。这难道不允许对一个(非常普遍的)可行性问题给出一个(非常普遍的)答案吗?很多人用 NoSQL 陈述可能会问自己,但不一定敢问?
  • @Christophe 好吧,它仍然是小镜头(即使它可能更粗糙)。你可以很容易地在这个问题上写一本书——至少是一篇文章。

标签: json database nosql uml uber-api


【解决方案1】:

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

您将面临挑战:

  1. document 世界和对象世界之间的映射:文档可能包含多个相关对象(无需连接),以及到其他对象的链接(另见embedded/nested document vs. document references)。

  2. 可能非结构化(或结构松散)的文档:文档数据库对文档的内容非常灵活,完全可以将完全不相关的类的对象混合到同一个文档集合中。此外,文档的字段/属性/成员可能是动态的和不断发展的。然而,在实践中,集合通常包含类似的对象,这些对象主要在字段方面有所不同(例如,承认隐式类的存在)。 Documents may even be validated according to a schema 以确保在需要时保持一致性。

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

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

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

【讨论】:

  • 非常感谢,很有帮助
猜你喜欢
  • 1970-01-01
  • 2011-11-25
  • 2016-12-01
  • 2012-05-07
  • 1970-01-01
  • 2011-08-07
  • 2014-10-16
  • 2021-10-04
相关资源
最近更新 更多