我是 NoSQL 使用的初学者,目标是构建一个超级数据库。是否可以使用 UML 绘制 CouchDB 数据库(面向文档),特别是如何进行联接?或者还有其他更适合 NoSQL 数据库建模的替代方案吗?
您可以使用UML 类图对应用程序域的实体和聚合进行建模,无论实现技术如何。
您还可以建模一个更具体的实现,该实现使用NoSQL https://hostingdata.co.uk/nosql-database/数据库,特别是文件存储 https://en.wikipedia.org/wiki/Document-oriented_database例如 CouchDB。存储在数据库中的对象有点脱水(即没有行为的对象数据)到文档中。
您将面临以下挑战:
-
之间的映射document https://guide.couchdb.org/draft/documents.html世界和对象世界:a文档可能包含多个相关对象(不需要加入),以及到其他对象的链接(也可以看看嵌入/嵌套文档与文档引用 https://softwareengineering.stackexchange.com/a/413088/209774).
-
潜在地非结构化(或松散结构)文档:文档数据库对于文档的内容非常灵活,并且完全允许将完全不相关的类的对象混合到同一个文档集合中。此外,文档的字段/属性/成员可能是动态的并且不断发展。然而在实践中,集合通常包含类似的对象,这些对象主要在字段方面有所不同(例如,承认隐式类的存在)。文档甚至可以根据模式进行验证 https://softwareengineering.stackexchange.com/questions/401191/is-it-recommended-to-use-schemas-on-non-relational-databases/401193#401193以确保一致性(如果需要)。
-
UML 类基于强类型,而文档中的类型与其内容的其余部分一样灵活(例如字段from
可能是一个约会2000-04-02
在一个文档或字符串中"a long time ago"
在另一张)。
所以在开始之前,你需要考虑绘图策略。我的建议是在 UML 中重点关注对象模型的设计,并将文档视为相关文档的方便分组(DDD 聚合 https://martinfowler.com/bliki/DDD_Aggregate.html可能在这方面有所帮助)。以下经验法则可能有助于建模:
- 连接(例如独立文档之间的链接)将由关联表示。
- 对象与其他对象的系统分组,可能表明存在某种更强的关系,例如 UML 组合。
- 因文档而异的字段将用可选属性(多重性
0..1
or 0..*
)或封闭对象的概括/专业化,取决于解释变化的逻辑。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)