我目前正在一个项目中,我的Java Android应用程序中需要两种不同类型的无关数据结构。一个是使用者,另一个是食物类型。
用户设置如下:
用户
但是,我还需要一个看起来像这样的东西,它必须是可搜索的:
食物
是否可以使用相同的数据库(最好是Firebase,因为我已经在使用该数据库),还是需要向正在制作的应用程序中添加另一个数据库?
编辑:我最终导出了JSON,并根据此处给出的正确答案将其重写,然后再次导入。它完美地工作。感谢您的回答!
{
"foods" : {
"name" : {
"carbohydrates" : "5",
"fats" : "5",
"proteins" : "5"
}
},
"users" : {
"FjtMNTcDrOP2wcaPAa0E0Cc1jRz2" : {
"activity" : "Moderate Exercise (3–5 days/week)",
"age" : "40",
"gender" : "Male",
"height" : "180",
"name" : "Flex",
"weight" : "86"
}
}
}
答案 0 :(得分:2)
是的,您可以使用相同的Firebase实时数据库来存储该数据。
可以将RTDB简化为一个JSON树。因此,对于所需的实现,您将在数据库的根目录有两个键(例如“用户”和“食物”)。
{
"users": {
"userid1": {
"name": "somestring",
"age": "somenum",
"gender": "somestring",
"height": "somenum",
"weight": "somenum",
...
},
...
},
"foods": {
"food1": {
"name": "somename",
"carbs": "somenum",
"fat": "somepercent",
"protein": "somepercent",
...
},
...
}
}
您还可以根据需要添加或删除更多根密钥,从而使项目成形。
正如@Tamir Abutbul在他们的答案中所建议的,我将通过RTDB在该项目中使用Cloud Firestore。
这样做的原因是,根据您的数据,将来可能需要一次按许多不同的值来过滤结果。 Cloud Firestore本机支持这些类型的查询(docs),而您需要为RTDB编写自定义解决方案。
答案 1 :(得分:2)
是的,可以在Firebase实时数据库中为多个实体类型(例如users
和foods
)建模。尽管它没有表的概念,但它是JSON值的层次结构,您可以在其中建模所需的任何结构。
例如,您可以使用以下JSON表达数据模型:
{
"users": {
"userid": {
"name": "value",
"age": 42,
"gender: "value",
"weight": 190,
"height": 172
}
},
"foods": {
"name": {
"carbohydrate": 42
"fat": 11,
"protein": 8
}
}
}
在关系方面,以上模型定义了两个“表”:users
和foods
。在Android代码中,您可以使用以下命令分别定义对每个引用的引用:
DatabaseReference rootReference = FirebaseDatabase.getInstance().getReference();
DatabaseReference usersReference = rootReference.getChild("users");
DatabaseReference foodsReference = rootReference.getChild("foods");
答案 2 :(得分:0)
您可以将Firebase与Cloud Firestore一起使用。
使用所需的数据结构创建“用户”集合,并使用其自己的数据结构创建另一个名为“食物”的集合。
下一步就是根据您的应用逻辑决定何时使用这些集合中的任何一个。