将出勤记录存储在数据库中

时间:2010-01-04 08:49:59

标签: sql database

我之前发现了一个类似的问题(School attendance database

我必须处理这些附加条件。

  1. 录制出席的用户总数为100,000。
  2. 每位用户都会有滑入式滑动条目。
  3. 用户可能会进行多次滑入式滑动操作/他不确定是否已捕获数据。
  4. 必须保留一年的出勤记录,用户可以访问。
  5. 我认为基本表是以下条目。

    1. UserID - 数值
    2. 日期
    3. 及时滑动
    4. 滑出时间。
    5. 如果这是表格,那么在理想情况下,数据库中的大约行数= 100,000 x 250(以yr为单位的工作日)= 25,000,000。现在,如果用户重复滑动或滑动行,则会加起来。比如1/3的员工这样做是为了确保出勤率得到标记。所以额外的行8,333,333总计约33,333,333。

      其中一个问题是用户刷两次但只刷一次。然后我需要在第二次滑动中具有空值或在滑出字段中填充相同的值。这会添加所提到的额外行。 我认为另一个选项是每天运行后台任务来清理双用户条目。假设用户在8.00 A.M然后在8.10 A.M处滑动,因此系统会在当天结束时删除8.10 A.M条目。首先是在最后一个时间基础上。

      然而,我怀疑我是谁。如果说用户在办公室工作过夜并且滑动可能是凌晨2点。滑动数据将是

      1. 滑入 - 1月1日 - 10日 - 8.00 A.M。
      2. 向外滑动 - 1月2日 - 2月 - 2.00 A.M。
      3. 刷卡 - 1月2日 - 10日 - 凌晨1点(他当天再次回到办公室 - 工作压力:))。
      4. 离开 - 1月2日 - 10日 - 下午10点 如何处理?
      5. 我的问题是:  1.列出的行数是否可以被mysql,postgresql这样的数据库所接受,而不会延迟过多的回溯时间?我会更感兴趣的是开源数据库性能。  2.有没有更好的方法来格式化表格呢?

4 个答案:

答案 0 :(得分:3)

简单的答案是你记录滑动而不是几天,然后对数据进行后处理以实现所需的跟踪 - 即使没有你的例子,还有更多基本的“外出吃午饭”或其他原因去在场外,每天需要多次到达和离开。

无论你做什么,你都会遇到多次滑动的问题 - 人们是“人”你会遇到边缘情况,即用户出于某种原因以奇怪的方式行事(通常是无辜的......) )。

答案 1 :(得分:1)

这是一个小规范化:

用户表: 用户身份 名字 姓 电子邮件 WhateverOtherFields UserCreated [datetime] LastActivityDateTime [datetime]

AttendanceTable: AttendanceID 用户身份 事件ID SwipeIn [datetime] SwipeOut [datetime]

事件表: 事件ID 事件名称 EventLocation EventStart [datetime] EventEnd [datetime]

使用这样的布局,您可以在同一天保留多个出勤率。您可以允许用户使用SwipeIn开始出席,并在用户SwipeOut之前保持该出勤率。也许还给系统一个刷新过程,让你可以关闭那些从未接触过SwipeOut的参与者。通过添加类似事件表的内容来附加到考勤表,您可以跟踪事件等。你可以完全全力以赴或亲吻。

希望这有帮助!

答案 2 :(得分:0)

我没有看到任何问题。的行。许多应用程序通常具有这样的数据量。以下是我的意见:

1)您需要考虑正式的工作时间,比如上午9点至下午6点,即每天9小时。如果用户在午夜之后过期,则应将午夜之后的剩余时间添加到第二天的出勤时间。  滑动 - 1月1日 - 10日 - 上午8点+向外滑动 - 1月2日 - 2月 - 凌晨2点   1月1日至10月16日,1月2日至2月2日  刷卡 - 1月2日 - 10日 - 凌晨1点+向外扫描 - 1月2日 - 10日 - 下午10点   = 1月2日10点

所以你的总时间是1月10日的16小时和1月2日的11小时。

您可以在表格中添加的另一项内容是“已记录的小时数”列。不是很有用,但有时候有助于提取报告。您可以为此列添加值,仅用于清除不会被清除的条目,即最后输入。

答案 3 :(得分:0)

考虑以下步骤:

  1. 进行逻辑设置,如果两次登录之间的差异超过每日工作时间,则应用程序可以理解用户忘记退出。
  2. 在损坏的后退中添加一个标记(登录时没有注销或同一天的多个相同操作或......),您可以从读卡器和mack子表单中获取,以便由出勤管理员或人员手动修改主管。
  3. 表设计 考勤表 a)attId int incr EMPID [登录](日期时间) [LogOut](日期时间) [完成](位)< - 此标志取决于您所做的逻辑设置,并将其显示给管理员以进行修改 “-----------------------
  4. 我认为有一种方法可以由系统自动管理这种情况。人的触摸必须有所帮助。