0

所以我正在开发一个使用 MySQL 数据库的计划应用程序。该站点的模块之一是供经理跟踪迟到、加班和缺勤。目前的网站一团糟。它只是让经理输入关键数据,但不会将经理绑定到任何已知数据(例如员工预计何时到达/离开),甚至不要求他们使用标准格式。一些经理进入 30 分钟(意味着迟到 30 分钟),而其他经理可能进入 8:30(意味着他们应该在 8:00 进入)等等。

我的版本将受到更多限制。经理会选择员工,然后选择有问题的班次,他们基本上可以输入两个值:实际到达时间,实际离开时间。这样,当报告运行并验证时间表时,只需进行数学运算即可查看它们是否迟到/早到/加班。但我遇到了一个困难的地方:

首先,如果有人请病假(或只是没有出现),我会得到它,所以经理只需勾选一个框,他们根本不会进行任何时间调整。它只是完全抹去了那个时间。我是否应该通过将两个时间值都设置为 NULL 来做到这一点,并且在运行任何查询时,NULL 将根据需要进行处理(可能会反转剩余时间和时间到达,因此两端都为零),或者我应该时间到了和剩下的时间都设置为“预期的班次结束”时间,所以它的结果为零?

我不喜欢使用 NULL,因为它只是感觉没有可用的数据,但我不喜欢使用预期的班次结束,因为它看起来好像他们真的到达了,就在他们离开的时候。

这实际上是一个如何使数据语义化而不必使其过于复杂(使用 NULL)的问题。

4

6 回答 6

1

NULL 在这种情况下是合适的,因为它表示没有数据的现实。那个员工不在。你还能放什么?

您应该在记录中附加某种状态来表明这一点,而不是寻找空值(恕我直言)。

于 2009-07-25T00:15:02.707 回答
1

我会设置 NULL 因为实际上没有可用的数据(即没有要报告的班次开始/结束时间)。

在报表上,您可以跳过这些 NULL 值并对其进行单独处理。例如,您现在可以通过计算 NULL 行来计算员工错过了多少班次。

于 2009-07-25T00:15:29.397 回答
0

我认为如果有人不进来,将其标记为0分钟是最有意义的。因为他们在那个班次上进了 0 分钟。

此外,由于它是一个数值,因此您实际上不必对数据执行任何特殊操作。在我看来,这应该是收集数据的最终目标。让一切统一起来,后面的测试就可以了。如果您想提醒某人此人没有进来,只需检查时间等于 0 的记录。

于 2009-07-25T00:10:49.480 回答
0

如何创建一个单独的表(ShiftTimes?),其中包含员工的标识符、班次的标识符(可能是日期,但不适用于第三班)以及进入和退出时间。这样,如果员工在那里打电话,那一天的表中就不会有记录。

于 2009-07-25T00:13:09.647 回答
0

我将它们都设置为 null 并添加一个标志字段,指定它们是否出现。

于 2009-07-25T00:15:09.477 回答
0

我同意您应该添加一个单独的列来跟踪他们是否缺席。那么,是否将开始/结束时间留在那里并不重要。您可以直接查找 IsAbsent 标志。

老实说,这实际上取决于您想要制作它的花哨程度。我已经做了一个类似的系统,在这种情况下我们要做的是有一个单独的记录一起记录缺席并确定它是否被原谅。因为理想情况下,除了生病或没有出现之外,还有许多其他原因。

如果缺席被原谅(即假期)并且他们应该得到报酬怎么办?我猜您的业务规则将推动这些决策。

在做出任何最终决定之前,请尝试考虑所有可能的情况。你最终可能会发现,在这种情况下,开始时间和结束时间毕竟变得不敬了。

于 2009-07-25T00:45:41.793 回答