1

今天是个好日子。我花了一整天的时间寻找我的问题的答案,但不幸的是我没有找到我想要的答案。

我正在尝试通过在 PHP 和 MySQL 数据库中创建 Web 应用程序来自动化我们当前使用的一些流程。

我想在 excel 中准备员工时间表,然后使用 php 将其上传到 MySQL。大多数数据库字段都是直截了当的:员工 ID 为 INT,日期为 DATE 格式。

我面临的问题是时间。当员工工作时,我想在 TIME 中上传他们的班次开始时间和结束时间,但是,如果他们不工作,我希望数据库以字母形式存储他们的状态:OFF 表示休息日,AL 表示年度请假,ML 病假,EL 紧急病假等等。

我不知道什么数据类型会支持这个。即:接受时间或特定结果代码列表中的条目。

任何帮助将不胜感激。

穆罕默德。

旁注: 我在开始学习如何编码时提出了这个问题,我学会避免的错误之一是混合业务逻辑和应用程序逻辑。这个问题将来可能对某人有用,我对任何新开发人员的建议是确保业务模型逻辑可能不会与您的应用程序逻辑齐头并进,但总有一种方法可以使这行得通。

穆罕默德。

4

3 回答 3

2

Here is an idea, put another column for status, one of the status will be working status and every other status will be as described. Only working status will have data in the "start time" and "end time" columns. In my opinion this is the best solution and allows for better search capabilities, cleaner database and more comprehensive readability.

However, if you absolutely want to, and/or have any reason on why you can't have an additional column, you can always store your time as text.

PS: Another tip for your database is to drop the date column and store both times in DATETIME format, it may range from unlikely to nearly impossible depending on what job shifts you are storing in the database, but it is possible to start a shift on one day and end it the next day, and even if you think you won't ever need it, it is good practice and makes the database more resilient. If you had to change it in the future it would be a pain to do so.

于 2012-11-03T21:56:31.043 回答
1

MySQL 中没有这样的数据类型。

一个VARCHAR字段将接受日期和您的自定义代码,但如果编写查询会很痛苦:您将始终必须在转换为报告时间之前检查数据等。

我只会创建三个可为空的字段:startTimeendTime并且当且仅当两个时间都是 时才absenceReason填充。absenceReasonNULL

于 2012-11-03T21:39:47.553 回答
1

您可以使用 VarChar 或 Char 字段来存储时间或文本值。但是,我建议对不同的事物使用不同的字段。比如数据类型time的开始时间和结束时间。以及 VarChar 或 Char 类型的休假类型等的单独字段。

于 2012-11-03T21:40:43.630 回答