你的建议的方法是很好的做法:你应该尝试尽可能多的扁平化你的数据结构尽可能。
我建议使用用户的ID作为每个地址的成员资格,因此很容易识别。通过这种方式,您可以从/addresses/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了解有关如何构建数据的更多详细信息。
我喜欢你的第一个解决方案,因为我想为“谢尔曼街”的孩子添加更多的属性,比如“时间到了”,所以我会试一试。感谢您的回答 – JDoe
感谢您的接受,很高兴我能提供帮助。如果你愿意,你可以同时使用这两种方法,但是这意味着当用户改变他们的地址选择时,更新'/ users/$ uid/address'和'/ addresses/$ name/members'下的地址成员列表。尽管(用户到地址和用户地址)这两个对象的链接都是有用的。该文档有一个很好的例子:[更新特定字段](https://firebase.google.com/docs/database/android/read-and-write#update_specific_fields)(参见'writeNewPost()'方法)。 – Grimthorr
嘿,再次感谢昨天的帮助。我发布了一个关于数据库结构的新问题。如果你有时间,欢迎来看看这个问题。 https://stackoverflow.com/questions/46732732/android-retrieving-data-from-firebase – JDoe