次の階層を持つメッセージング アプリケーションを構築しています。
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
最善のアプローチに関する洞察に感謝します。ありがとう