Firebase数据架构指南

时间:2016-06-30 06:44:56

标签: firebase firebase-realtime-database schema nosql

我是Firebase的新手,并致力于使用firebase创建事件。在这里,我使用他们的电话号码邀请我的朋友。(我邀请的人不一定是系统用户的一部分。)

以下是我的架构:

{
  "events": [
    {
      "message": "Lunch",
      "startTime": 1469471400000,
      "eventCreatorId": 1,
      "endTime": 1469471400000,
      "invitees": [
        {
          "phone": "1234567890",
          "type": "phone"
        },
        {
          "phone": "345678901",
          "type": "phone"
        }
      ]
    }
  ]
}

现在的问题是我怎样才能找到特定邀请的所有事件的列表? (即在上述情况下,我想查找电话号码为eqaul至345678901的用户的所有事件列表。)

有人可以建议使用firebase处理上述场景的好架构吗?

1 个答案:

答案 0 :(得分:3)

欢迎使用NoSQL数据库。 : - )

在NoSQL中,您经常最终对数据进行不同的建模,以允许您希望应用程序执行的查询。在这种情况下,您显然希望同时显示每个事件的受邀者每个被邀请者的事件。如果是这种情况,您将以两种格式存储数据:

{
  "events": {
    "event1": {
      "message": "Lunch",
      "startTime": 1469471400000,
      "eventCreatorId": 1,
      "endTime": 1469471400000,
      "invitees": {
        "phone_1234567890": true,
        "phone_345678901": true
      }
    }
  },
  "users": {
    "phone_1234567890": {
      "phone": "1234567890",
      "type": "phone",
      "events": {
        "event1": true
      }
    },
    "phone_345678901": {
      "phone": "345678901",
      "type": "phone"
      "events": {
        "event1": true
      }
    }
  }
}

您会看到我将您的数据拆分为两个独立的顶级节点:事件和用户。它们使用所谓的显式索引相互引用,实质上是一组您在客户端代码中管理(和加入)的外键。

我也用命名键替换了你的数组。如果您的活动/用户具有自然密钥(例如uid用于识别用户,如果您恰好使用Firebase身份验证),则可以使用该密钥。但除此之外,您可以使用Firebase推送ID。使用这样的密钥会导致数据结构更具可扩展性,然后取决于数组索引。

Firebase documentation on data structuring中涵盖了这两个主题。我也强烈推荐这个article on NoSQL data modeling