まさに公式ドキュメントの通りの設計になる良い例だと思います。
https://firebase.google.com/docs/database/ios/structure-data#flatten_data_structures
間違っているわけではないと思いますが、こうした方がいいだろうなと言うアドバイスが2点あります。
1.YYYYMMDD毎に分けて、その下にlistを置かなくても、roomのフィールドにroomDateみたいにして持たせてしまえば、SQLの「where roomDate = 20170520」みたいに限定して取得可能です。
ここが所謂「ネストをしすぎてはいけない」の部分ですね。
2.roomの属性を表す情報と(rooms)、roomの中の会話情報(room-messages)は別々に保存した方がいいです。
ルーム一覧を取得する時に、roomの会話情報が同じ階層に含まれてしまうと、会話が長くなった時にデータ量が多くなって、通信速度に影響が出るからです。
ここが所謂「データ構造を平坦化する」の部分ですね。
全部書いたらこんな感じになると思います。
json
1"users": {
2 "userID1": {
3 "name": "test"
4 },
5 "userID2": { ... },
6 "userID3": { ... }
7},
8
9"rooms": {
10 "roomID1": {
11 "name": "hello!"
12 "roomDate": 20170520
13 },
14 "roomID2": { ... },
15 "roomID3": { ... }
16},
17
18"room-members": {
19 "roomID1": {
20 "userID1": true,
21 "userID3": true
22 },
23 "roomID2": { ... },
24 "roomID3": { ... }
25},
26
27"room-messages": {
28 "roomID1": {
29 "messageID1": {
30 "name": "eclarke",
31 "message": "The relay seems to be malfunctioning.",
32 "timestamp": 1459361875337
33 },
34 "messageID2": { ... },
35 "messageID3": { ... }
36 },
37 "roomID2": { ... },
38 "roomID3": { ... }
39}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。