你的建議的方法是很好的做法:你應該嘗試儘可能多的扁平化你的數據結構儘可能。
我建議使用用戶的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