首页 文章

如何存储时间表?

提问于
浏览
0

我正在开展一个必须存储员工时间表的项目 . 例如,一名员工的工作时间为周一至周四上午8点至下午2点以及下午4点至晚上8点 . 另一名员工可于周二至周六上午6点至下午3点工作 .

我正在寻找一种算法或方法来将这类数据存储在MySQL数据库中 . 这些数据很少被访问,因此它不是重要的性能问题 .

我曾想过将它存储为一个字符串,但我不知道任何算法来“编码”和“解码”这个字符串 .

2 回答

  • 2

    正如许多评论所表明的那样,定义数据元素及其关系通常更好,并在数据库中表示这些结构 . Wikipedia article on data models很好地概述了's involved (although it'比你需要的更通用的方式 . 你描述的问题看起来很简单,你可以用铅笔和纸做这个 .

    一种开始的方法是记下问题中概念之间的逻辑关系列表 . 例如,列表可能如下所示(您的规则可能不同):

    • 每位员工都遵循一个时间表 .

    • 每位员工都有姓名和员工ID . 不同的员工可能具有相同的名称,但每个员工的ID对于该员工是唯一的 .

    • 计划有一周的开始和停止日以及一天的开始和停止时间 .

    • 计划的每一天的开始和停止时间都相同 .

    • 几名员工可能在同一时间表上 .

    从这里,您可以列出规则中使用的名词 . 这些是数据库中实体(列)的候选者:

    • 员工

    • 员工ID

    • 员工名字

    • 员工姓氏

    • 时间表

    • 安排开始日

    • 安排开始时间

    • 安排结束日

    • 安排结束时间

    对于我列出的规则,时间表似乎独立于员工而存在 . 由于需要一种方法来识别员工遵循的计划,因此添加一个实体是有意义的:

    • Schedule ID

    如果你再看一下规则中的动词(“跟随”,“有”等),你就会开始掌握关系 . 到目前为止,我将所有内容分为两种关系:

    Employees
        ID
        first_name
        last_name
        schedule_ID
    
    Schedules
        ID
        start_day
        start_time
        end_day
        end_time
    

    这似乎是数据结构所需要的全部内容 . (对于Schedules表, start_dayend_day 的合理替代方法将是一周中每一天的布尔字段 . )下一步是设计索引 . 这是由您希望进行的查询驱动的 . 您可能希望查看以下内容:

    • 员工ID = xyz以下是什么时间表?

    • 周一中午谁在上班?

    • 哪天没人在工作?

    由于员工和计划由各自的ID唯一标识,因此这些应该是各自表的主要字段 . 您可能还希望拥有数据的一致性规则 . (例如,您没有定义 . )这可以通过定义 Employees.schedule_ID 字段和 Schedules.ID 字段之间的"foreign key"关系来处理,这意味着应该索引 Employees.schedule_ID . 但是,由于员工可以共享相同的计划,因此它不应该是唯一的索引 .

    如果您需要按星期几和一天中的某个时间查看计划,那么这些计划也可能值得编制索引 . 最后,如果您想按名称查找员工,那么这些字段也应该被编入索引 .

  • -1

    假设你正在使用PHP:

    将时间表存储在php数组中,然后使用serialize函数将其转换为字符串;返回数组使用unserialize . 然而,这种记忆形式几乎从来都不是一个好主意 .

相关问题