1

次の階層を持つメッセージング アプリケーションを構築しています。

Organization -> Chat Rooms -> Threads -> Messages

firebaseでリレーショナル エンティティを構築するための最良のアプローチについて、私は少し混乱しています。ドキュメントにはデータを平坦化すると書かれていますが、データが平坦化されている場合は、識別子を見つけるために各レコードを検索する必要があり、よりコストがかかるようです。これを行うための最も費用対効果の高い、または「適切な」方法は何ですか? 以下は私の当初の提案です。矢印は親子関係を示します。id の下のアンダースコアは、生成された識別子を意味します (firebase .push() を使用)。

rooms ->
  _room_id ->
    org_id
    label
    created
    type

threads ->
  _thread_id ->
    room_id
    created

messages ->
  _message_id ->
    thread_id
    user_id
    name
    created
    status
    body

そして、これが新しく提案された構造です。これら 2 つの主な違いは、リレーショナル エンティティが親レベルではなく子レベルにあることです。

rooms ->
  org_id ->
    _room_id ->
      label
      created
      type


threads ->
  org_id ->
    room_id ->
      _thread_id ->
        created

messages ->
  org_id ->
    room_id ->
      thread_id ->
        _message_id ->
          user_id
          created
          status
          body

新しく提案された構造を使用すると、uri 構造は次のようになります。

/rooms/<org_id>                          -> rooms
/threads/<org_id>/<room_id>              -> threads
/messages/<org_id>/<room_id>/<thread_id> -> messages

最善のアプローチに関する洞察に感謝します。ありがとう

4

0 に答える 0