在员工读取他的 rfid 卡后,我从多个 rfid 硬件设备获取记录。这些记录包含
- 设备ID
- 时间戳
- 夏令时/非夏令时
- UID(RFID卡)
- 项目 ID(由用户选择)
阅读此 stackoverflow 问题后,有两种设计数据库的方法:
- 使用类似事件的表格设计(每条记录都是一个新行)
- 使用类似时钟的表格设计(每个输入/输出对都是一个新行)
使用后一种设计将使报告/分析变得非常容易(例如“哪个员工的工作时间超过 x 小时?”、“哪个员工没有出勤记录?”、“每位员工的总小时数?”、...)。
选项1
但是由于我需要存储所有上述信息以用于进出记录,因此我的表格设计如下所示:
RecordId | EmployeeId | TimestampIn | DstIn | UidIn | ProjectIdIn | TimestampOut | DstOut |...
这并不“看起来”像是完成我需要的正确方法。
选项 2
然后我考虑使用第二个表来获取详细信息:
记录:
RecordId | EmployeeId | TimestampIn | TimestampOut
记录详情
RecordDetailsId | RecordId | Timestamp | Dst | Uid | ProjectId
这样我可以在需要时访问详细信息,但可以直接在记录表上进行基本计算。
选项 3
第三个选项是使用事件表:
RecordId | EmployeeId | Timestamp | Dst | Uid | ProjectId | In/Out
这肯定会奏效,但以后会更难分析/报告(见上文)。
所以我的问题归结为:上述任何设计是否被认为是解决我的问题的“最佳实践”,我应该选择其中一个选项吗?虽然选项 1 在计算持续时间等方面看起来不错。我担心如果我需要添加额外的列,这最终会变得一团糟。
注意:记录是否输入/输出将由员工最后一次输入来确定。如果它是一个输入记录(Out 在选项 1/2 中为空),那么它将是一个输出条目。