我正在快速开发一个员工时间管理应用程序,我很乐意帮助您了解数据结构以及如何提取一些查询。 用户数据库是这样的:
{"Database":
{"users"
{"3iHTIn1MicMdPbgEV6nnMy5ijHq1":
{ "company" : "My Company",
"email" : "edel@gmail.com",
"name" : "Tom",
"type" : "Employee"
}
}
}
}
用户将在开始和完成工作时打卡上下类。 是在项目中打开新的子项来获取日期和时间,还是将日期添加到用户子项中更好? (请在回答之前查看我要拉取的查询) 帮助解答疑问:
提取用户本月的所有日期和时间。
拉取所有同公司名且当前工作的用户(现场打卡已满,现场打卡为空)。
提取所有用户拥有的所有公司名称并删除重复项(最好在项目中创建另一个仅包含公司名称的子项?)
谢谢!!
最佳答案
一些想法。我可能会对数据进行非规范化,因为您有多种查询方式。我使用一些伪代码来保持答案简短(呃)
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/