json - 如何使用 UML 绘制 NoSQL 数据库(面向文档)?
问题描述
我是使用 NoSQL 的初学者,旨在构建一个类似 uber 的数据库。是否可以使用 UML 绘制 CouchDB 数据库(面向文档),特别是如何进行连接?或者还有其他更适合 NoSQL 数据库建模的替代方案吗?
解决方案
无论实现技术如何,您都可以使用UML 类图对应用程序域的实体和聚合进行建模。您还可以为使用NoSQL数据库的更具体的实现建模,特别是 CouchDB 等文档存储。存储在数据库中的对象是一种脱水的(即没有它们的行为的对象数据)成一个文档。
您将面临以下挑战:
文档世界和对象世界之间的映射:一个文档可能包含多个相关对象(不需要连接),以及到其他对象的链接(另请参阅嵌入/嵌套文档与文档引用)。
潜在的非结构化(或松散结构)文档:文档数据库对于文档的内容非常灵活,并且完全允许将完全不相关的类的对象混合到同一个文档集合中。此外,文档的字段/属性/成员可能是动态的和不断发展的。然而,在实践中,集合通常包含类似的对象,这些对象主要在字段方面有所不同(例如,承认隐式类的存在)。如果需要,甚至可以根据模式验证文档以确保一致性。
UML 类基于强类型,而文档中的类型与其内容的其余部分一样灵活(例如,一个字段
from
可以是一个文档中的日期2000-04-02
或另一个文档中的字符串"a long time ago"
)。
因此,在开始之前,您需要考虑映射策略。我的建议是将 UML 中的重点放在对象模型的设计上,并将文档视为相关文档的方便分组(DDD 聚合可能在这方面有所帮助)。以下经验法则可能有助于建模:
- 连接(例如独立文档之间的链接)将由关联表示。
- 对象与其他对象的系统分组,可能表明存在某种更强的关系,例如 UML 组合。
- 根据解释变化的逻辑,可以使用可选属性(多重性
0..1
或)或封闭对象的泛化/专业化来表示因文档而异的字段。0..*
推荐阅读
- python - Python - 如何检查 Google 电子表格是否已更新
- javascript - window.location.reload(); 陷入无限循环
- python - 在 Python Pebble 库中获取生成进程的进程 ID?
- mysql - 当您对 SQL 数据库中表中的每一列进行索引时,CRUD 会发生什么?
- asp.net-mvc - 来宾可以在 VS2019 中使用实时共享运行代码并制作独立服务器吗?
- python - 正则表达式只匹配各种括号外的内容
- python - 解析大量交错参数的正确方法
- flutter - 我创建并导入到 Flutter 的自定义图标在应用程序中呈现为汉字
- javascript - FFMPEG 多截图命令
- python - CS50 PSET6 - DNA - 适用于 SMALL 但不适用于 LARGE 数据库