Closed. This question is opinion-based。它当前不接受答案。
想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
6个月前关闭。
我正在开发使用Firebase作为数据库的应用程序。
我一直在设计关系数据库(MySQL),但不确定是否正在设计我需要的数据库
在MySQL方面,我有3个相互关联的表。
第一个表称为“登录”,第二个表称为“ Usuario”,第三个表称为“ Fichada”
至于关系,“登录”与单个“ Usuario”(1:1)关联,并且“登录”可以有多个“ Fichada”(0:*)
Diagram
我需要的是在非关系数据库的范式中设计相同的结构。
现在我有这样的事情:
我有一个名为“登录”的文档,里面有另一个名为“ Usuario”的文档和一个名为“ Fichada”的文档集合
我需要知道这是否正确。我很怀疑,因为当我进入应用程序时,用户必须输入他们的登录信息,而那时我根本不需要“ Fichada”中包含的信息。问题是我不知道什么时候只能获取自己需要的信息(当我获得登录文档时,我会自动获取“ Usuario”和所有“ Fichada”文档)。
在一个所谓的拥有15.000.000“ Fichada”的案例中,我不想全部带走,但是由于我从Firebase带来的是Login对象而不是“ Fichada”,因此,我以后不能过滤或携带它们。
我正在检索Firebase信息,如下所示:
这样,每当我获得“登录”实体时,我也会获得所有“ Fichada”,而且我认为这不是最佳选择
然后再有两个文档,如下所示:
也就是说,每个值都是一对。
也就是说,Fichada文件的价值将是Fichadas的集合。
唯一的问题是维护地图的唯一键,但是您可以将登录表的用户名/标识/唯一标识符用作两者的键。希望有帮助:)
想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
6个月前关闭。
我正在开发使用Firebase作为数据库的应用程序。
我一直在设计关系数据库(MySQL),但不确定是否正在设计我需要的数据库
在MySQL方面,我有3个相互关联的表。
第一个表称为“登录”,第二个表称为“ Usuario”,第三个表称为“ Fichada”
至于关系,“登录”与单个“ Usuario”(1:1)关联,并且“登录”可以有多个“ Fichada”(0:*)
Diagram
我需要的是在非关系数据库的范式中设计相同的结构。
现在我有这样的事情:
"Login":
"atribute1" : value1
"atribute2" : value2
"Usuario": {
"atribute3" : value3
"atribute4" : value4
}
"Collection<Fichada>": {
"atribute5" : atribute5
}
我有一个名为“登录”的文档,里面有另一个名为“ Usuario”的文档和一个名为“ Fichada”的文档集合
我需要知道这是否正确。我很怀疑,因为当我进入应用程序时,用户必须输入他们的登录信息,而那时我根本不需要“ Fichada”中包含的信息。问题是我不知道什么时候只能获取自己需要的信息(当我获得登录文档时,我会自动获取“ Usuario”和所有“ Fichada”文档)。
在一个所谓的拥有15.000.000“ Fichada”的案例中,我不想全部带走,但是由于我从Firebase带来的是Login对象而不是“ 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());
这样,每当我获得“登录”实体时,我也会获得所有“ 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文件的价值将是Fichadas的集合。
唯一的问题是维护地图的唯一键,但是您可以将登录表的用户名/标识/唯一标识符用作两者的键。希望有帮助:)
08-16 14:38