我正在研究一个必须存储员工时间表的项目。例如,一名员工周一至周四的工作时间为上午8点至下午2点,下午4点至8点。另一位员工可能在星期二至星期六上午6点至下午3点工作。如何存储时间表?
我正在寻找一种算法或方法来将这些数据存储在MySQL数据库中。这些数据很少被访问,所以它不是重要的性能问题。
我以为它存储为一个字符串,但我不知道任何算法来“编码”和“解码”这个字符串。
我正在研究一个必须存储员工时间表的项目。例如,一名员工周一至周四的工作时间为上午8点至下午2点,下午4点至8点。另一位员工可能在星期二至星期六上午6点至下午3点工作。如何存储时间表?
我正在寻找一种算法或方法来将这些数据存储在MySQL数据库中。这些数据很少被访问,所以它不是重要的性能问题。
我以为它存储为一个字符串,但我不知道任何算法来“编码”和“解码”这个字符串。
正如许多评论指出的那样,将所有数据编码成基本上对数据库无意义的字符串通常是一个糟糕的主意。定义数据元素及其关系通常会更好,并在数据库中表示这些结构。是一个很好的概述(尽管它比你需要的更普遍)。你所描述的问题似乎很简单,你可以用铅笔和纸做这件事。
开始的一种方法是记下问题中概念之间的逻辑关系列表。例如,列表可能如下所示(您的规则可能不同):
由此,您可以列出规则中使用的名词。这些都在数据库中的实体(列)考生:
对于我列出的规则,计划似乎独立于员工而存在。由于需要进行识别的方式,也安排员工遵循,是有意义的增加一个实体:
如果你再看看在规则动词(“以下“,”有“等),你开始处理关系。我将目前为止所有内容分为两种关系:
Employees
ID
first_name
last_name
schedule_ID
Schedules
ID
start_day
start_time
end_day
end_time
这似乎是数据结构所需要的一切。 (对于Schedules表,start_day
和end_day
的合理替代将是一周中每一天的布尔型字段。)下一步是设计索引。这是由你期望的查询驱动的。您可能期望看到以下内容:
由于员工和计划表由其各自的ID唯一标识,因此这些应该是其各自表格的主要字段。您也可能想要为数据制定一致性规则。 (例如,您不希望雇员的日程安排未定义。)这可以通过在Employees.schedule_ID
字段和Schedules.ID
字段之间定义“外键”关系来处理,这意味着Employees.schedule_ID
应该被编入索引。但是,由于员工可以共享相同的时间表,因此不应该是唯一索引。
如果您需要按星期几和一天中的时间查找时间表,那么这些也可能值得建立索引。最后,如果你想通过名字查找员工,那么这些字段也应该被编入索引。
以外的操作。但是,通过此计划,您如何表示第一个示例(“星期一到星期一星期四从上午8点到下午2点,从下午4点到8点“)。开始日和结束日是好的,但要表示开始时间和结束时间,我需要在“日程表”表中使用2行,但“员工”只有一个日程表ID ...恐怕我们需要第三个表,真正? – Ivan
也许如此。方法是一样的:从在域中应用的一组规则开始。显然,我使用的规则是:_“时间表有一周的开始和结束日期以及一天的开始和结束时间。”_不适用。你只需要做同样的事情:写下正确的规则,把名词变成实体,然后用动词定义关系,然后你就可以形成表格。诸如表示多对多关系等技术问题可能需要引入表格,这些表格在域名描述中并不明显,但在您完成整个过程时会自然而然地出现。 –
请不要将其存储为“加密”字符串。 –
我希望通过加密你的意思模式。 –
也许他的意思是“编码”和“解码”? –