在一个Firebase数据库中使用两种不同的结构

时间:2019-03-16 10:17:38

标签: java android database firebase firebase-realtime-database

我目前正在一个项目中,我的Java Android应用程序中需要两种不同类型的无关数据结构。一个是使用者,另一个是食物类型。

用户设置如下:

用户

  • 用户ID
    • 名称
    • 年龄
    • 性别
    • 体重
    • 高度

但是,我还需要一个看起来像这样的东西,它必须是可搜索的:

食物

  • 名称
    • 碳水化合物
    • 脂肪
    • 蛋白质

是否可以使用相同的数据库(最好是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"
    }
  }
}

3 个答案:

答案 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编写自定义解决方案。

Getting Started with Cloud Firestore

答案 1 :(得分:2)

是的,可以在Firebase实时数据库中为多个实体类型(例如usersfoods)建模。尽管它没有表的概念,但它是JSON值的层次结构,您可以在其中建模所需的任何结构。

例如,您可以使用以下JSON表达数据模型:

{
  "users": {
    "userid": {
      "name": "value", 
      "age": 42,
      "gender: "value", 
      "weight": 190,
      "height": 172
    }
  },
  "foods": {
    "name": {
      "carbohydrate": 42
      "fat": 11,
      "protein": 8
    }
  }
}

在关系方面,以上模型定义了两个“表”:usersfoods。在Android代码中,您可以使用以下命令分别定义对每个引用的引用:

DatabaseReference rootReference = FirebaseDatabase.getInstance().getReference();
DatabaseReference usersReference = rootReference.getChild("users");
DatabaseReference foodsReference = rootReference.getChild("foods");

答案 2 :(得分:0)

您可以将Firebase与Cloud Firestore一起使用。

使用所需的数据结构创建“用户”集合,并使用其自己的数据结构创建另一个名为“食物”的集合。
下一步就是根据您的应用逻辑决定何时使用这些集合中的任何一个。