2016-09-11 12 views
0

私は自分のモバイルとWebアプリケーションにFirebaseデータベースを使用しています。私はJSONツリーをどのように構造化するかについてアドバイスを受けたいと思っていました。Firebaseデータベースの構築方法

モバイルアプリのユーザーがログインし、近隣のすべてのレストランをリストに表示します。ユーザーは1つのレストランで注文を設定します。レストランのオーナーは、ウェブまたはモバイルアプリケーションを使用して受注を確認し、受け取ります。注文を受け入れた後、モバイルアプリユーザーは、注文が受け入れられたという応答を受け取ります。

enter image description here

はSO我々は、各 restaurantのトップレベルにあるノードがあり、各 restaurantノードは、このレストランのためのすべての要求を保存し requestsノードが含まれています。今の構造のための私の考えは以下の通りでした。

この構造は問題ありませんか?

+1

あなたの質問にJSONツリーの画像が含まれています。 Firebaseデータベースコンソールの[エクスポート]ボタンをクリックすると、実際のJSONをテキストとして置き換えてください。 JSONをテキストとして検索可能にすることで、実際のデータを使ってテストしたり、答えに使用したりすることができます。一般的には、これは良いことです。 –

+1

NoSQLでは、あなたのアプリケーションがそれをどのように使用するかについてのデータをモデル化することがよくあります。はじめに[NoSQLデータモデリング](https://highlyscalable.wordpress.com/2012/03/01/nosql-data-modeling-techniques/)でこの記事を読んでください。 –

答えて

2

このようなデータ構造を考えてみましょう。レストランを利用するときにすべてのリクエストを取得したくない場合は、レストランのすべてのリクエストと特定のユーザーからのすべてのリクエストを取得できます。私は... 幸運をどうなるのかだ

{ 
    "requests": { 
     "req1": { 
      "status": 0, 
      "time": 1473593287, 
      "user": { "u2": true } 
     }, 
     "req2": { 
      "status": 0, 
      "time": 1473593227, 
      "user": { "u1": true } 
     }, 
     "req3": { 
      "status": 0, 
      "time": 1473594287, 
      "user": { "u1": true } 
     }, 
     "req4": { 
      "status": 0, 
      "time": 1473594227, 
      "user": { "u2": true } 
     }, 
    }, 
    "restaurant-requests": { 
     "resA": { 
      "req1": true, 
      "req2": true 
     }, 
     "resB": { 
      "req3": true, 
      "req4": true 
     } 
    }, 
    "restaurants": { 
     "resA": { 
      "name": "Example Restaurant A", 
      "address": "1 Example Street" 
     }, 
     "resB": { 
      "name": "Example Restaurant B", 
      "address": "2 Example Street" 
     } 
    }, 
    "user-requests": { 
     "u1": { 
      "req2": true, 
      "req3": true 
     }, 
     "u2": { 
      "req1": true, 
      "req4": true 
     } 
    }, 
    "users": { 
     "u1": { 
      "address": "123 Example Street" 
     }, 
     "u2": { 
      "address": "124 Example Street" 
     }, 
    }, 
} 
+0

しかし、これは新しいリクエストがある場合にこれを意味します。私はアンドロイドコードを介して 'requests'ノードにノードを追加し、' restaurant-requests \ resX'ノードに余分なノードを追加し、 'user-requests \ uX'ノードに余分なノードを追加する必要があります。あるいは、1つのクエリだけで、これらの変更をすべて1つのクエリで行う方法がありますか? – farahm

+2

haha​​ firebaseへようこそ – Callam

+0

コンセプトの周りに私の頭を包み込むのに時間がかかりましたが、これらの重複を持つことでユーザ時間を節約できます – Callam

関連する問題