java - Firebase:我使用的结构正确吗?

标签 java firebase google-cloud-firestore

我正在开发一个使用 Firebase 作为数据库的应用程序。

我一直在设计关系数据库(MySQL),但我不确定我是否正在设计我需要的数据库

就MySQL而言,我有3个相互关联的表。 第一个表称为“Login”,第二个表称为“Usuario”,第三个表称为“Fichada”

就关系而言,一个“Login”可以关联一个“Usuario”(1:1),一个“Login”可以关联多个“Fichada”(0:*)

Diagram

我需要的是设计相同的结构,但采用非关系数据库的范例。

现在我有类似的东西:

"Login":
    "atribute1" : value1
    "atribute2" : value2

    "Usuario": {
         "atribute3" : value3
         "atribute4" : value4
    }

    "Collection<Fichada>": {
         "atribute5" : atribute5
    }

我有一个名为“Login”的文档,其中包含另一个名为“Usuario”的文档和一个名为“Fichada”的文档集合

我需要知道这是否正确。我很怀疑,因为当我进入应用程序时,用户必须输入他们的登录信息,而那时我根本不需要“Fichada”中包含的信息。问题是我不知道有什么方法可以只获取当时需要的信息(当我获取登录文档时,我会自动获取“Usuario”和所有“Fichada”文档)。 在据称拥有 15.000.000 个“Fichada”的情况下,我不想将它们全部带入,但由于我从 Firebase 带来的是登录对象而不是“Fichada”,所以我无法稍后过滤或带入它们。

我正在检索 Firebase 信息,如下所示:

Login login = new Login();
CollectionReference referenciaLogin = db.collection("login");

Query query = referenciaLogin.whereEqualTo("email", email);

List<QueryDocumentSnapshot> documentos = query.get().get().getDocuments();
login = documentos.get(0).toObject(Login.class);
login.setIdLogin(documentos.get(0).getId());

这样,每当我获得“Login”实体时,我也会获得所有“Fichada”,我认为这不是最佳的

最佳答案

虽然上面的结构确实是正确的,但如果您非常关心检索的效率,您可以使用多一层间接并设计如下:

"Login":
    "atribute1" : value1
    "atribute2" : value2
    "mapToUserIO" : value_3
    "mapToFichada" : value_4

然后还有两个文档如下:

"UserIO":
        "key": value_3
        "value":{
              "atribute3" : value3
              "atribute4" : value4
         }

也就是说,每个值都是一对。

"Fichada":
        "key": value_4
        "value":"Collection<Fichada>": {
         "atribute5" : atribute5
    }

也就是说,Fichada文档的值将是Fichada的集合。

唯一的问题是维护 map 的唯一键,但您可以使用登录表的用户名/id/唯一标识符作为两者的键。希望有帮助:)

关于java - Firebase:我使用的结构正确吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57510155/

相关文章:

java - NetworkInterface 不返回所有 mac 地址

Java 8 - 如何从列表映射中获取单个值?

java - Java中的随机类

android - 无法使用 Firebase Analytic 4.1.0 和 Admob 3.7.0 构建 Apk

java - 我什么时候应该删除 OnCompleteListener?

java - 在spring mvc中找不到css文件等资源

android - FCM : Invalid registration token. 检查 token 格式

reactjs - React router 会短暂显示登录屏幕,然后在用户登录后重定向到仪表板

android - 使用 GeoFirestore for Android 时是否可以添加一些过滤器?

angular - Firestore 错误 : The query requires an index