gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:31:14 24 4
gpt4 key购买 nike

我正在开发一个使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com