【问题标题】:Android - Firebase Database StructureAndroid - Firebase 数据库结构
【发布时间】:2017-10-12 14:27:14
【问题描述】:

我正在开发一个 android 应用程序,年龄较大的孩子可以在其中接年幼的孩子并步行上学。使用该应用程序,经过身份验证的(电子邮件和密码)年幼的孩子可以在三个地址之间进行选择以进行接听。截至目前,我的实时数据库如下所示:

我应该创建一个名为“Adresses”的新节点并具有如下结构吗?

  Adresses
    Sherman Street
     username: Jannie

因为我想在列表视图中检索街道名称和所有选择地址的用户

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    您建议的方法是一种很好的做法:您应该尽可能地扁平化您的数据结构。

    我建议使用用户 ID 作为每个地址的成员身份,以便于识别。这样您就可以从/addresses/Sherman Street 获取“Sherman Street”的成员列表,然后将其中列出的密钥与/users/ 的用户轻松匹配。

    {
      "users": {
        "oXrJPVZsnMP3VKp9palSBfdnntk1": { ... },
        "xQDx3ntavhV3c02KFRPS8lxYfC62": { ... }
      },
    
      "addresses": {
        "Sherman Street": {
          "members": {
            "xQDx3ntavhV3c02KFRPS8lxYfC62": true
          }
        },
        "Wallaby Way": {
          "members": {
            "oXrJPVZsnMP3VKp9palSBfdnntk1": true
          }
        }
      }
    }
    

    您也可以通过向与地址名称匹配的用户添加address 字段来添加反向链接:

    {
      "users": {
        "oXrJPVZsnMP3VKp9palSBfdnntk1": { ... },
        "xQDx3ntavhV3c02KFRPS8lxYfC62": {
          "username": "Jannie",
          "address": "Sherman Street"
        }
      },
    
      "addresses": {
        "Sherman Street": { ... }
      }
    }
    

    将两者结合使用可以轻松识别哪些用户选择了哪些地址,无论您当前在应用中处理哪个对象。

    请参阅Firebase documentation on database structure,了解有关这样构建数据的更多详细信息。

    【讨论】:

    • 我喜欢你的第一个解决方案,因为我想为“谢尔曼街”孩子添加更多属性,比如“上车时间”,所以我会尝试那个。感谢您的回答
    • 感谢您的接受,很高兴能为您提供帮助。如果您愿意,您可以同时使用这两种方法,但这意味着当用户更改其地址选择时,更新/users/$uid/address/addresses/$name/members 下的地址成员列表。不过,这有助于在任一方向链接两个对象(用户到地址和地址到用户)。文档中有一个很好的例子:Update specific fields(参见writeNewPost() 方法)。
    • 嘿,再次感谢昨天的帮助。我发布了一个关于数据库结构的新问题。如果你有时间,欢迎你看问题。 stackoverflow.com/questions/46732732/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 1970-01-01
    相关资源
    最近更新 更多