2017-10-12 18 views
1

私は年長の子供が子供を拾って学校に通うことができるアンドロイドアプリケーションを開発しています。アプリケーションでは、認証された(電子メールとパスワード)の若い子供は、取得する3つのアドレスの間で選択することができます。とおり、今、私のリアルタイム・データベースは、次のようになります。Android - Firebaseデータベース構造

Database as of now

私は「なアドレスは」という名前の新しいノードを作成し、以下のような構造を持っているべきですか?

Adresses 
    Sherman Street 
    username: Jannie 

私は通りの名前とリストビューにアドレスを選択したすべてのユーザーを取得したいので

答えて

0

あなたの提案方法は良い習慣です:あなたは、あなたのデータ構造を限り平らにしてくださいできるだけ。

各アドレスのメンバーシップにユーザーの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を参照してください。

+0

私はあなたの最初の解決策が好きです。「シャーマンストリート」の子供に「拾う時間」のようなプロパティを追加したいので、私はそれを試してみます。お返事ありがとう – JDoe

+0

私が手伝ってくれてうれしい。あなたが望むのであれば、両方の方法を併用することができますが、ユーザがアドレス選択を変更したときに、 '/ users/$ uid/address'と'/addresses/$ name/members 'のアドレスのメンバーのリストを更新することを意味します。これはどちらの方向にでも両方のオブジェクトをリンクするのに役立ちます(ユーザーはユーザーに対処し、ユーザーに対処する)。ドキュメントには、[特定のフィールドを更新する](https://firebase.google.com/docs/database/android/read-and-write#update_specific_fields)の良い例があります( 'writeNewPost()'メソッドを参照)。 – Grimthorr

+0

昨日、助けてくれてありがとう。私はデータベースの構造に関する新しい質問を投稿しました。時間があれば、質問を見ることを歓迎します。 https://stackoverflow.com/questions/46732732/android-retrieving-data-from-firebase – JDoe

関連する問題