如何在 UML 图中建模 Firebase 数据库?

9

我在安卓上有一个项目,所以我决定制作一个问答应用,并且我在其中使用了Firebase。但是我还需要为这个项目设计UML图表,我在想是否可以做到,因为Firebase是一种无表数据库。


您的关注点是什么?您是否想知道是否可以在UML中表示Firebase数据库? - qwerty_so
@Thomas Kilian 是的,因为我有一个大学项目,他们需要我们的Android应用在UML图中表示,并且我到目前为止一直使用Firebase,所以我想知道是否可以做到。 - Monica Khoury
3
一个概念模型是可行的,比如在类图中。更具体的模型可能取决于您的确切数据模型。有关介绍和一些示例,请参见https://www.ripublication.com/ijaer17/ijaerv12n5_12.pdf。另请参见https://dev59.com/-Ggu5IYBdhLWcg3wbWk9。 - Frank van Puffelen
请参考@FrankvanPuffelen给您提供的链接。下次请在问题中更具体一些。我已经将其标记为不清楚。由于它太广泛,我不会撤回我的关闭投票。 - qwerty_so
@FrankvanPuffelen 好的,谢谢! - Monica Khoury
1个回答

1
Firebase数据库,无论是实时数据库还是云Firestore,都是面向文档的NoSQL数据库。事实上,它们没有表格,只有文档集合,每个文档都是类似JSON的结构,文档可以包含其他嵌入式集合或文档。
理论上,集合中的每个文档都可以与其他所有文档完全不同。在这种情况下,UML类图将毫无意义,因为类假设具有共同的属性和行为。
db.collection("ouch"):          // Not recommended 
     [ {name: "Spiderman"}, 
       {size: "XXL", item: "T-Shirt}, 
       {date: "July 4 1776", event:"independence day"} ]

实际上,然而,集合中的文档通常是一组非常相似的对象,或者至少是相关的对象。也许集合中的一个对象具有更多或更少的属性。但它们代表着同样类型的事物:

db.collection("users"):   // example 1, small variations
      [ { id: "AL", first: "Ada",last: "Lovelace"},
        { id: "JSMITH", last: "Smith", first: "Joe", lastLogin:"2021-07-10"} ]

db.collection("shopItems"):    // example 2, more variations but common ground
      [ { id: 123, type: "Book", title: "The definitive guide to Firebase", author:"L.Moroney", price: 34.23 },
        { id: 124, type: "Record", title: "Get lucky", artist: "Daft Punk", price: 16.20}
        { id: 125, type: "Shirt", brand: "Seidensticker", model:"Classic", size: "XL", color:"white", price: 65.00 } ]

在这种情况下,您可以完美地使用UML类图,因为UML不是基于表格的,而是基于类的:
- 类表示一种事物。在反向工程中,通常会从已知的集合开始。 - 同一种类文件之间的小结构差异将在UML类图中用“可选”属性(即多重性[0..1])表示(请参见“用户”示例中的“lastLogin”)。 - 具有某些共同点的文件之间的更大差异通常会使用更专业的类进行建模(请参见“shopItems”示例,其中我们可以猜测一个名为“ShopItem”的类及其专业化,例如“BookItem”,“RecordItem”,“TextileItem”)。 - 建模的挑战在于理解嵌入式文档和子集合。这些通常是其他关联类(或组成类)的标志。
原则上,UML类图不仅仅用于数据库(仅数据),而且可以独立于数据库设计应用程序的对象模型(数据和行为)。该模型随后可以帮助您设计基于所需对象类型以满足用户需求的数据库。

理论上,集合中的每个文档都可以与其他所有文档完全不同。但这是最糟糕的做法,没有人会推荐这样做。数据持久性为零...而且你应该始终对你的数据进行概念模型设计(是的,使用UML),在我看来。 - BorisD
2
@BorisDetry 没错!我认为我们完全同意。这就是为什么我以“理论上”开头,接着写了一个“实践中”的段落,针对现实世界。而我的最后一段正好说出了你关于概念模型的观点,只不过我强烈认为概念模型不仅仅适用于数据,还适用于类(数据+行为);-) - Christophe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接