2016-06-30 3 views
1

Firebaseの初心者です。Firebaseを使用してイベントを作成しています。ここで私は自分の電話番号を使用して私の友人を招待しています以下は Firebaseのデータスキーマのガイダンス

は私のスキーマです(私がシステムのユーザーの一部になります招いています誰である必要はない。):。

{ 
    "events": [ 
    { 
     "message": "Lunch", 
     "startTime": 1469471400000, 
     "eventCreatorId": 1, 
     "endTime": 1469471400000, 
     "invitees": [ 
     { 
      "phone": "1234567890", 
      "type": "phone" 
     }, 
     { 
      "phone": "345678901", 
      "type": "phone" 
     } 
     ] 
    } 
    ] 
} 

今問題があることです私はどのように特定の招待状のすべてのイベントのリストを見つけることができますか? (すなわち上記の場合には、私が345678901.に電話番号eqaulを持つユーザーのすべてのイベントのリストを見つけたい)

は、誰もがfirebaseで上記のシナリオを処理するための良いスキーマを提案することはできますか?

答えて

3

ようこそNoSQLデータベースを使用します。 :-)

のNoSQLでは、多くの場合、アプリを実行するクエリを許可するために、異なるデータを、モデル化してしまいます。この場合、招待客1人あたりのイベント数はになります。そのような場合は、両方のフォーマットでデータを格納します:イベントとユーザー:

{ 
    "events": { 
    "event1": { 
     "message": "Lunch", 
     "startTime": 1469471400000, 
     "eventCreatorId": 1, 
     "endTime": 1469471400000, 
     "invitees": { 
     "phone_1234567890": true, 
     "phone_345678901": true 
     } 
    } 
    }, 
    "users": { 
    "phone_1234567890": { 
     "phone": "1234567890", 
     "type": "phone", 
     "events": { 
     "event1": true 
     } 
    }, 
    "phone_345678901": { 
     "phone": "345678901", 
     "type": "phone" 
     "events": { 
     "event1": true 
     } 
    } 
    } 
} 

あなたは私は2つの別々のトップレベルのノードにデータを分割してきたことがわかります。基本的には、クライアント側のコードで管理(および結合)する外部キーのセットと呼ばれる、いわゆる明示的なインデックスを使用して互いに参照します。

また、配列を名前付きキーに置き換えました。あなたのイベント/ユーザがナチュラルキー(Firebase認証を使用する場合にユーザを識別するためのuidなど)を持っている場合は、そのキーに使用します。しかしそうでなければ、FirebaseプッシュIDを使うことができます。このようなキーを使用すると、配列インデックスに応じてよりスケーラブルなデータ構造になります。

これらのトピックの両方はFirebase documentation on data structuringに記載されています。私はまたこれを強く勧めます。

+0

こんにちはフランク、これは理にかなっています。私はここで非正規化を使うことを考えましたが、ちょっと混乱しました。上記の説明と変更されたスキーマで、私はこれを明確にしています。あなたの詳細な説明に感謝します:-) – Jim

関連する問題