我正在实施一个小时间跟踪应用程序,我不能在两个数据库设计之间做出决定.
第一个包含单个表中的所有日志条目,即.
TimeLog ------------- job_id : long timestamp start : boolean [or perhaps 'type : enum'] _id : long
另一种选择是有两个表,一个用于'开始'条目,另一个用于'停止'条目.
StartLog StopLog ------------- ------------- job_id : long job_id : long timestamp timestamp id : long id : long
每种方法的优缺点是什么?还有另一种选择吗?
我的特定应用程序将在SQLite上运行,我想优化它以提高速度 - 但我对泛型参数感兴趣.
我会选择第一个(单表,类型区分)设计,不是特别因为有太多表,而只是因为数据库实体非常相似,并且会有类似的约束和操作.
我会使用第一个设计:一个数据库表.正如Cade Roux所说,实体非常相似,并且会有类似的约束和一组共同的操作.另外,我建议将start
字段重命名为type
使用数据类型调用的字段enum
.
假设在某些时候你想记录其他时间,而不仅仅是开始和停止时间.最明显的例子是雇主记录员工的休息时间.一些雇主向员工支付短暂休息时间,可能持续15分钟或更短时间.你不希望他们完全打出来(即"熄灭"),但你确实想表明他们已经开始休息时间,工资计算和法律目的(例如,n
每小时强制休息),根据法律要求).
Table "TimeLog" --------------- job_id : LONG timestamp : TIMESTAMP type : ENUM [ "punch-in", "punch-out", "break-start", "break-stop" ] _id : LONG
type
使用数据类型的字段可以轻松完成此操作enum
.你可以有一个punch-in
,punch-out
,break-start
,并且break-stop
,在上述例子的情况下.