ios - Firebase 结构数据库和查询

标签 ios swift firebase structure

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

/image/hfSXM.jpg

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

用户将在开始和完成工作时打卡上下类。 是在项目中打开新的子项来获取日期和时间,还是将日期添加到用户子项中更好? (请在回答之前查看我要拉取的查询) 帮助解答疑问:

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

  2. 拉取所有同公司名且当前工作的用户(现场打卡已满,现场打卡为空)。

  3. 提取所有用户拥有的所有公司名称并删除重复项(最好在项目中创建另一个仅包含公司名称的子项?)

谢谢!!

最佳答案

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

Pull all the dates and the hours for this month for user.

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

Pull all the user that have same company name and work now (the field clock in are full and the field clock out are empty).

使用 NoSQL 搜索任何数据会使事情变得更加复杂,因此我们将完全避免这种情况。同样,复合查询将在 comp_status 节点上使用上述结构完成这项工作。

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

此查询将返回为 company_0 工作并且在岗 (true) 的所有用户。当他们下类时(如 uid_1 的情况),设置为 company_0_false。

Pull list all the company names that have for all users and delete duplicate (is better to make another child in the project with only company’s names?)

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

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"

关于ios - Firebase 结构数据库和查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44074572/

相关文章:

firebase - 是否可以从 FCM 向现有 GCM 用户发送推送通知?

ios - 两种同名字体

ios - 如何在iOS11 App Store的应用程序页面上设置顶部图像

ios - 警告试图从数组中获取字符串,iOS

ios - 自定义 UITableViewCell 未正确加载

ios - 查询 Firebase 和过滤 FDataSnapshot 的正确方法

iphone - 滚动时如何使第一个和最后一个 UITableView 单元格留在屏幕上?

ios - 在 UICollectionView 中禁用滚动并调整其大小以包裹所有单元格

swift - 扩展协议(protocol)以实现不同的行为

javascript - Google Pub/Sub 更新 Firestore 子集合