我发现之前有人问过类似的问题(学校出勤数据库 https://stackoverflow.com/questions/1021580/database-design-for-school-attendance-system)
我必须处理这些额外的条件。
- 记录出席的用户总数为 100,000。
- 每个用户都会有滑入滑出条目。
- 用户可以进行多次滑入滑出,以防她不确定是否捕获了数据。
- 必须保留 1 年的出勤记录,用户可以访问该记录。
我认为基本表包含以下条目。
- 用户 ID - 数值
- Date
- 及时滑动
- 刷卡超时。
如果这是该表,那么在理想情况下,数据库中的行数大约为 = 100,000 x 250(以年为单位的工作日)= 25,000,000。现在,如果用户重复滑入或滑出行,则会累加。假设 1/3 的员工这样做是为了确保标记出勤率。因此额外的行 8,333,333 总计约为 33,333,333
其中一个问题是当用户滑入两次但仅滑出一次时。然后我需要在第二次滑入时具有空值或在滑出字段中填充相同的值。这将添加提到的附加行。
我认为的另一个选择是每天运行后台任务来清理双用户条目。假设用户在上午 8.00 刷入,然后在上午 8.10 刷入,因此系统会在一天结束时删除上午 8.10 的条目。先进后出时间基准。
然而,我可能预见到的是。如果说用户在办公室工作过夜并可能在凌晨 2 点刷卡。滑动数据将是
- 刷入 - 2010 年 1 月 1 日 - 上午 8 点
- 刷出 - 2010 年 1 月 2 日 - 凌晨 2 点
- 刷入 - 2010 年 1 月 2 日 - 下午 1 点(他当天再次回到办公室 - 工作压力:))
- 刷出 - 2010 年 1 月 2 日 - 晚上 10 点
这要怎么处理呢?
我的问题是:
1.列出的行数是否可以被mysql、postgresql等数据库接受,并且不会延迟太多检索时间?我对开源数据库性能更感兴趣。
2. 还有比这更好的格式化表格的方法吗?
简单的答案是,您记录滑动而不是几天,然后对数据进行后处理以实现所需的跟踪 - 即使没有您的示例,也有更基本的“出去吃午饭”或其他离开现场的原因,每天需要多次到达和离开。
无论你做什么,你都会遇到多次滑动的问题 - 人是“人”,你将与边缘情况作斗争,即用户出于某种原因以奇怪的方式行为(通常是相当无辜的......)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)