Firebaseを使ってユーザーごとのデータを管理するアプリを作ろうとしているのですが、データ構造を下記のいずれにしようか迷っています。
公式ガイドでは案2のようにネストを浅く保つことが薦められていますが、他ユーザーのデータにアクセスすることがないようなアプリであれば案1でも特に問題がないようにも思えます。
明確にこちらがよいという理由が思い浮かばず、決めかねているのですが、それぞれを採用する場合のメリット・デメリットを教えていただけるとありがたいです。
よろしくお願いします。
2017-04-04 追記
案2のような構造にした場合、ユーザーごとのデータはユーザーしか閲覧できないように権限を設定すると、セキュリティルールの仕様上、一覧を取得できなくなるので、案2を改造しました。
######案1
ユーザーのIDがルート直下にあって、それぞれのユーザーIDの配下に各種データ構造を持たせる。
json
1{ 2 "user_id_1": { 3 "diaries": { 4 "diary1": { ... }, 5 "diary2": { ... }, 6 ... 7 }, 8 "todos": { 9 "todo1": { ... }, 10 ... 11 } 12 }, 13 "user_id_2": { 14 "diaries": { 15 "diary1": { ... }, 16 "diary2": { ... }, 17 ... 18 }, 19 "todos": { 20 "todo1": { ... }, 21 ... 22 } 23 }, 24 ... 25}
######案2
各データ構造のデータごとにユーザーのIDを持たせる。
json
1{ 2 "diaries": { 3 "diary1": { 4 "user_id": " ... ", 5 "details": " ... " 6 ... 7 }, 8 "diary2": { 9 "user_id": " ... ", 10 "details": " ... " 11 ... 12 }, 13 }, 14 "todos"; { 15 "todo1": { 16 "user_id": " ... ", 17 ... 18 }, 19 }, 20 ... 21}
**追記)**これだと各データはそのユーザーにしかアクセスできないようにルールを設定した場合、/diaries
や/todos
でデータの一括取得ができなくなる。(Firebaseガイド:ルールはフィルターではない)
なのでこうする必要がある。こうすれば/diaries/[user_id]
でユーザーごとのデータ一覧が取得できる。
json
1{ 2 "diaries": { 3 "user_id_1": { 4 "diary1": { 5 "user_id": "user_id_1", 6 "details": " ... " 7 ... 8 }, 9 "diary2": { 10 "user_id": "user_id_1", 11 "details": " ... " 12 ... 13 }, 14 }, 15 "user_id_2": { ... }, 16 }, 17 "todos"; { 18 "user_id_1": { 19 "todo1": { 20 "user_id": "user_id_1", 21 ... 22 }, 23 }, 24 }, 25 ... 26}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/03/31 09:21