2017-05-19 18 views
0

私は迅速で、従業員の時間管理アプリを開発していますが、私は、データの構造とどのようにいくつかのクエリを抽出するためのお手伝いをさせていただきます。Firebase構造データベースとクエリ

https://i.stack.imgur.com/hfSXM.jpg

{"Database": 
    {"users" 
    {"3iHTIn1MicMdPbgEV6nnMy5ijHq1": 
      { "company" : "My Company", 
      "email" : "[email protected]", 
      "name" : "Tom", 
      "type" : "Employee" 
      } 
    } 
    } 
} 

ユーザークロックとアウト時に、開始と終了の仕事は以下となります。 ユーザデータベースは、このようなものです。 日付と時間のプロジェクトで新しい子を開くか、日付を持つユーザーの子に追加する方が良いですか?クエリと(私は答えの前に引くしたいクエリを参照してください) ヘルプ:

  1. ユーザーのための今月のすべての日付と時間を引き出します。

  2. すべての今、同じ会社名および仕事を持っているユーザーに引いて(フィールドクロックでいっぱいで、フィールドクロックアウトは空です)。

  3. プルリストは、すべてのユーザーの持っているすべての会社名および重複を削除するには(唯一の企業の名前でプロジェクトに別の子を作るために良いですか?)

感謝!!

+0

Firebase構造のスニペットをテキストとして、画像なしで含めてください。画像は検索可能ではなく、回答の一部として使用する必要がある場合、テキストは再タイピングの代わりにコピー/ペーストすることができます。また、リンクが途切れるのでリンクもしないでください。 – Jay

+0

これらのクエリは、どちらの構造でも実行できます。追加の子ノードが2つ必要です。どちらの方法でも複合クエリを実行できます。クエリ#3は不明です。 – Jay

+0

こんにちはジェイ、Firebaseの構造をテキストに更新しました。ありがとうございます! –

答えて

0

少し考えてください。私はあなたがそれを照会するいくつかの方法を持っているので、おそらくデータを非正規化するでしょう。回答を短くするために擬似コードを使用しています

今月のすべての日付と時間をユーザーに引き出します。

ここでの課題は、2つのつの子ノードで照会されます。そのうちの1つは特定のユーザーであり、もう1つは日付の範囲です。ソリューションは、uidとYYMM(年月)

の複合問合せは、ここでは構造ですされています

jobs 
    job_0 
    start: 170518090135 
    end: 170518170515 
    uid_yymm: uid_0_1705 
    uid: uid_0 
    company_id: company_0 
    comp_status: company_0_true 
    job_1 
    start: 1705190835 
    end: 17051910430 
    uid_yymm: uid_0_1705 
    uid: uid_1 
    company_id: company_0 
    comp_status: company_0_false 

queryOrdered(byChild: "uid_yymm").queryEqual(to value: "uid_0_1705") 

これは、今年は05

ている2017年と月であることをuid_0のための仕事のすべてを照会します

今同じ会社名および仕事を持っているすべてのユーザーに引いて(アウトフィールド クロックではいっぱいあるとフィールドクロックは空です)。

Noデータを検索すると、NoSQLの処理が複雑になる可能性があるため、完全に回避します。ここでも、複合クエリは、comp_statusノード上の上記の構造でジョブを実行します。

queryOrdered(byChild: "comp_status").queryEqual(to value: "company_0_true") 

このクエリはclock_(真)であるcompany_0のために働くすべてのユーザーを返します。 uid_1の場合のように時計を消したときは、company_0_falseに設定します。

プルリストのすべてのユーザーのためにと 重複を削除しているすべての会社名(のみ 会社の名前でプロジェクトに別の子を作るために良いですか?)

これは少し曖昧ですが、私は答えがはい、別の会社名ノードを持っているが、ユーザーノードの会社への参照を保持すると思います。

Database 
    users 
     3iHTIn1MicMdPbgEV6nnMy5ijHq1 
     company: "company_0" 
     email: "[email protected]" 
     name: "Tom" 
     type: "Employee" 
     6889js9i99s9ksij8asd88as8d8 
     company: "company_1" 
     email: "[email protected]" 
     name: "bill" 
     type: "Employee" 

    companies 
     company_0 
     comp_name: "Electric Company" 
     company_1 
     comp_name: "Bad Company"