我是Firebase的新手,并致力于使用firebase创建事件。在这里,我使用他们的电话号码邀请我的朋友。(我邀请的人不一定是系统用户的一部分。)
以下是我的架构:
{
"events": [
{
"message": "Lunch",
"startTime": 1469471400000,
"eventCreatorId": 1,
"endTime": 1469471400000,
"invitees": [
{
"phone": "1234567890",
"type": "phone"
},
{
"phone": "345678901",
"type": "phone"
}
]
}
]
}
现在的问题是我怎样才能找到特定邀请的所有事件的列表? (即在上述情况下,我想查找电话号码为eqaul至345678901的用户的所有事件列表。)
有人可以建议使用firebase处理上述场景的好架构吗?
答案 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。