私のアプリの基本的な流れは、ユーザーが自分の友達に投稿を送り、友人がその投稿への返信を投稿できるようにすることです。私は2つのオプションを持っているファイアベース - データベース構造の効率とフラット性
は、私のような感じ:
1)
users
9308490384
postsInitiated
029309jf: true
InitiationsInvitedTo
lsfjijl39j390jf: true
lkajls;dkfj3ijl3f: true
initiations:
029309jf
timestamp: 293084093
picURL: picture.com
replies:
abc123: true
edf234: true
lsfjijl39j390jf
etc..
replies:
abc123
picURL: picture.com
posterUID: lsjdflkjk
2)
users
9308490384
postsInitiated
029309jf: true
InitiationsInvitedTo
lsfjijl39j390jf: true
lkajls;dkfj3ijl3f: true
initiations:
029309jf
timestamp: 293084093
picURL: picture.com
replies:
abc123
picURL: picture.com
posterUID: lsjdflkjk
両者の違いは、 "回答" の下のイニシエーションの下にあります。第一の選択肢は
abc123: true
のような応答のリストを持っているし、私はpicURL/posterUIDを見つけるために、回答ビットを検索するABC123キーを使用すると思います。
2番目のオプションは、[Initiation's replies]ビットの応答データをリストします。
ユーザーメッセージノードと「すべてのメッセージ」アレイを持つチャットアプリケーションが多数あり、ユーザーメッセージノードのメッセージのUIDSを使用してすべてのメッセージノードを検索します。
このケースでは、イニシエーションの下に返信情報をリストするだけで問題はありますか?私は間違いなく "返信"ノードを指すことでそれをさらに平坦化することができましたが、これは不要です。そんなに平らにする必要はありませんが、どこでもほとんどの場合、できるだけデータを平坦化することをお勧めします。