【问题标题】:Using two different structures in one Firebase database在一个 Firebase 数据库中使用两种不同的结构
【发布时间】:2019-08-07 07:16:58
【问题描述】:

我目前正在从事一个项目,我需要在我的 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"
    }
  }
}

【问题讨论】:

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


    【解决方案1】:

    您可以通过 Cloud Firestore 使用 Firebase。

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

    【讨论】:

      【解决方案2】:

      是的,您可以使用同一个 Firebase 实时数据库来存储该数据。

      RTDB 可以简化为只是一个 JSON 树。因此,对于您想要的实现,您将在数据库的根目录中有两个键(例如“users”和“foods”)。

      {
        "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

      【讨论】:

      • 谢谢。我坚持使用 Firebase,因为这只是一个概念验证应用程序。我会记住你的答案,以防我继续前进。
      【解决方案3】:

      是的,可以在 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");
      

      【讨论】:

      • 感谢您的回答。正是我需要知道的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-15
      • 2011-10-12
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 2015-09-22
      • 1970-01-01
      相关资源
      最近更新 更多