あなたの提案方法は良い習慣です:あなたは、あなたのデータ構造を限り平らにしてくださいできるだけ。
各アドレスのメンバーシップにユーザーのIDを使用することをお勧めします。この方法で、 "Sherman Street"のメンバーのリストを/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