2017-07-20 9 views
0

データベースの構造をどのように達成できるのだろうか。私は単純にマッチメイキングアプリを作っている、私は関係を一対多にしたい。Firebaseデータベース - ネストされたユーザノードを持つユーザのための推奨DB構造

matches 
    8aWcF6GQmpezfJkVnW5uYoJ2wtI3 //id for user 
     8oqmrMVZ57XXlunIAUEeBgKFZ0h2 //id of matched users 
     NzDaJNamKNVsWuP0FVaJI7b6Cuk1 
     XzGWMuXrFYQ6m0MMVSwvpjSV4JF2 

users 
    8aWcF6GQmpezfJkVnW5uYoJ2wtI3 
     email: "[email protected]" 
     uid: "8aWcF6GQmpezfJkVnW5uYoJ2wtI3" 
     username: "john" 
    NzDaJNamKNVsWuP0FVaJI7b6Cuk1 
     email: "[email protected]" 
     uid: "NzDaJNamKNVsWuP0FVaJI7b6Cuk1" 
     username: "john2" 
    XzGWMuXrFYQ6m0MMVSwvpjSV4JF2 
    email: "[email protected]" 
    uid: "8oqmrMVZ57XXlunIAUEeBgKFZ0h2" 
    username: "aaaaa" 

しかし、値なしで子ノードを実装することはできません。 Firebase Consoleでは、上記のような構造を作成することはできません。

私に何か提案してもらえますか?

答えて

1

実際、Firebaseは値のないキーを格納できません。だから、2つのオプションがあります。

  1. をキー
  2. をメイクさんが最初間違った解決策カバーしましょう値

をメイクアップ:キーを構成しているが。

多くの開発者は、独自のキーを作成するオプション1を選択します。これは、一般的に、配列を使用してそれらにつながる:

matches 
    8aWcF6GQmpezfJkVnW5uYoJ2wtI3 //id for user 
     [ "8oqmrMVZ57XXlunIAUEeBgKFZ0h2", "NzDaJNamKNVsWuP0FVaJI7b6Cuk1", "XzGWMuXrFYQ6m0MMVSwvpjSV4JF2" ] 

これは非常に簡潔なようだが、間違ったソリューションです。配列は、同じ値を複数回含むことができる順序付けされたコレクションです。あなたのデータでは、各ユーザーは1回だけ存在することができます。つまり、ユーザーを追加するたびにarray.contains()を実行する必要があります。

より良い解決策は、価値を作り上げることです。それは私たちがここで使用しているもの値が本当に問題ではありませんので、慣用的な値はtrueされています。今、データ構造は、まだまた、各ユーザーIDのみであることができることを意味し、キーにユーザーIDを持っている

matches 
    8aWcF6GQmpezfJkVnW5uYoJ2wtI3 //id for user 
     8oqmrMVZ57XXlunIAUEeBgKFZ0h2: true 
     NzDaJNamKNVsWuP0FVaJI7b6Cuk1: true 
     XzGWMuXrFYQ6m0MMVSwvpjSV4JF2: true 

コレクションは一度。これは本質的にはSet data structureのFirebaseデータベース実装です。

trueはここでは魔法の価値がないことに注意してください。したがって、ユーザーごとにいくつかのデータを保存する必要がある場合は、trueの代わりに簡単に保存することができます。

たとえば、すべての友人の名前を表示する場合は、trueの代わりに名前を保存することを検討できます。それはあなたが各ユーザのためにそれを見なければならないのを省くでしょう。もちろん、これは、ユーザーが自分の名前を変更した場合、何をしたいかを把握しなければならないことを意味します。詳細については、この回答を参照してください:How to write denormalized data in Firebase

関連する問題