Firebase结构数据库和查询

时间:2017-05-19 16:10:56

标签: ios swift firebase structure

我正在迅速开发一个员工时间管理应用程序,我很乐意帮助您了解数据结构以及如何提取一些查询。 用户数据库是这样的:

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

{"Database":
  {"users"
   {"3iHTIn1MicMdPbgEV6nnMy5ijHq1": 
           { "company" : "My Company",
             "email" : "edel@gmail.com",
             "name" : "Tom",
             "type" : "Employee"
           }
   }
  }
 }

用户将在开始和结束作业时进出。 最好在项目中打开日期和小时的新子项,或者将日期添加到用户子项中? (请在回答之前查看我想要提取的查询) 帮助查询:

  1. 为用户提取本月的所有日期和小时数。

  2. 拉出所有具有相同公司名称的用户并立即工作(现场时钟已满,现场时钟输出为空)。

  3. 拉出列出所有用户的所有公司名称并删除重复项(最好只用公司名称在项目中生成另一个孩子?)

  4. 谢谢!

1 个答案:

答案 0 :(得分:0)

一些想法。我可能会对数据进行非规范化,因为您有多种方法可以查询它。我正在使用一些伪代码来保持答案简短(呃)

  

为用户提取本月的所有日期和小时数。

这里的挑战是通过两个子节点进行查询;其中一个是某个用户,另一个是一系列日期。该解决方案是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")

这将查询uid_0的所有作业,年份为2017年,月份为05。

  

拉出所有具有相同公司名称的用户并立即工作(该字段   时钟输入已满,现场时钟输出为空。)

搜索没有数据可能会使NoSQL变得更复杂,所以我们完全避免这种情况。同样,复合查询将使用comp_status节点上的上述结构完成工作。

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

此查询将返回所有为company_0工作的用户,这些用户在时钟上是(true)。当它们熄灭时,如在uid_1的情况下,设置为company_0_false。

  

列出所有用户所有公司名称并删除   重复(最好只在项目中创建另一个子项   公司的名字?)

这有点模糊,但我认为答案是肯定的,有一个单独的公司名称节点,但在用户节点中保留对公司的引用。

Database
   users
      3iHTIn1MicMdPbgEV6nnMy5ijHq1 
         company: "company_0"
         email: "edel@gmail.com"
         name: "Tom"
         type: "Employee"
      6889js9i99s9ksij8asd88as8d8 
         company: "company_1"
         email: "bill@gmail.com"
         name: "bill"
         type: "Employee"

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