Ios Firebase结构数据库和查询

Ios Firebase结构数据库和查询,ios,swift,firebase,structure,Ios,Swift,Firebase,Structure,我正在swift中开发一个员工时间管理应用程序,我很乐意帮助您了解数据结构以及如何提取一些查询。 用户数据库如下所示: 用户将在开始和完成作业时打卡。 最好在项目中打开日期和小时的新子项,还是将日期添加到用户子项?(在回答之前,请查看我要提取的查询) 有关查询的帮助: 为用户提取本月的所有日期和时间 拉取所有具有相同公司名称且现在工作的用户(字段clock in已满,字段clock out为空) 拉式列出所有用户拥有的所有公司名称,并删除重复项(最好在项目中使用公司名称创建另一个子项?) 谢谢

我正在swift中开发一个员工时间管理应用程序,我很乐意帮助您了解数据结构以及如何提取一些查询。 用户数据库如下所示:

用户将在开始和完成作业时打卡。 最好在项目中打开日期和小时的新子项,还是将日期添加到用户子项?(在回答之前,请查看我要提取的查询) 有关查询的帮助:

  • 为用户提取本月的所有日期和时间

  • 拉取所有具有相同公司名称且现在工作的用户(字段clock in已满,字段clock out为空)

  • 拉式列出所有用户拥有的所有公司名称,并删除重复项(最好在项目中使用公司名称创建另一个子项?)


  • 谢谢

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

    为用户提取本月的所有日期和时间

    这里的挑战是通过两个子节点进行查询;其中一个是某个用户,另一个是日期范围。解决方案是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")
    
    此查询将返回在时钟上为公司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"
    

    请以文本形式包含Firebase结构的片段,无图像。图像是不可搜索的,如果我们需要使用它作为答案的一部分,文本将允许我们复制/粘贴,而不是重新键入。而且,链接会断开,所以也不要链接它;您将需要两个额外的子节点。无论哪种方式,都可以执行复合查询。查询#3不清楚。嗨,杰,我将Firebase结构更新为文本,谢谢!
    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"