2011-06-15 37 views
9

我最近采用了Employee模型的项目,该模型需要将该人的可用小时数作为属性。在UI和数据库中表示时间段

现有表单使用168个复选框来表示每周的每个小时,并将信息作为7个24位二进制字符串存储在数据库中,每个位在当天的相应小时内充当布尔值true或false。

我真的想过渡到的东西多一点优雅和管理的,但我一直没能拿出符合现有实现的灵活性,任何简单的解决方案。

存储时间段的开始和结束时间可以是一样乏味的输入时可以每天多次,并很可能使在特定的时间更复杂查询的可用性。

在用户界面和数据库结构中处理这种类型的信息是否有最佳做法?

+0

PostgreSQL原生支持时间间隔作为数据类型。 – Pointy 2011-06-15 22:06:53

+0

这绝对是很好的知道,但我不知道它真的解决了这个问题。如果我没有弄错,那么这些时间间隔不会与特定的开始时间或结束时间相关联,因此它们必须用作更复杂的数据结构的一部分来表示所有必需的信息。我想我真正想要的是一种干净,易于管理的方式来输入,存储和查询168个布尔值。或者更好的方式来表示每周的每个小时。 – Luke 2011-06-15 22:15:34

+0

那么你可以将一个间隔字段与一个日期字段配对,这样日期字段会给出开始时间和间隔的持续时间。不知道这是否会比两个日期字段更好或更差;它取决于你想运行的语义和查询。 – Pointy 2011-06-15 22:54:04

回答

1

我会以这种方式建模数据库中的数据。

Employee/Day/Hour Relationship

有一个许多人一周的每一天的员工和小时之间一对多的关系。

在UI方面,你可以使用的天,多选列表框复选框设置小时为一天。

+0

这看起来像迄今为止最有前途的方法。我最初犹豫了一周的时间以及0到23的数字,但它确实允许更简单的方法来查询可用性。 – Luke 2011-06-16 02:02:09

+0

第二个想法是否有利于像这样抽出时间和日子到自己的桌子上?为什么不能用'hour'整数和'day'字符串替换'hour_id'和'day_id'?通过适当的验证,它们绝不应该具有意想不到的价值,我认为这不会从该方法中获得任何灵活性。 – Luke 2011-06-16 02:11:24

+1

我这样做了模型的正常化。如果您需要存储关于时间和日期的其他描述符,则可以存储它的空间。例如,DOW表可以具有代表数字日的int,具有星期一,星期二,星期三等的Short_Day和具有星期一,星期二,星期三等的Long_Day。小时可以具有整数小时,然后是具有12am,1am等的字符或上午12时至凌晨1点,上午1-2点等。这将通过提供各种描述符为人类可读性提供帮助。 – 2011-06-16 02:37:19

1

你能制作时间段吗?

Employee 
    Availability 
    7AM -> 12PM 
     Monday 
     Tuesday 
     Wednesday 
    1PM -> 4PM 
     Monday 
     Tuesday 
    1PM -> 5PM 
     Wednesday 

每个用户都有一个时间表的列表,它们代表一天中的一个或多个小时。每个时间块也可以表示一周中的一天或多天。根据用户可用性的复杂程度,可能只有很少的数据或很多数据。

如果您不想更改用户界面,您不需要更改用户界面,因为您只需确定选中的复选框并构建时间段即可。如果两个时间之间有一个或多个小时的差距,它将成为另一个时间段。

添加Shift键UI :: http://imm.io/6vGk

显示员工班次:: http://imm.io/6vGv

+0

因此,在这种情况下,会有一个单独的有“开始时间”,“结束时间”,“天”和“user_id”列的可用性表?这可能会使数据库看起来更容易一些,但我不相信它会使输入或查询更容易。 – Luke 2011-06-16 01:43:34

+0

是的,可以为数据库工作。至于查询只是取决于你需要做的事情,查询越复杂,任何事情都会变得越困难。用户界面可以是任何你想要的东西......例如,我将在上面的答案中添加一些图像,以说明我为添加/显示班次做了什么 – CraigW 2011-06-16 16:00:23

0

我们商店雇员的时间表,并在两个不同的表非可用小时。搜索正在建立可用时间,然后排除不可用。员工时间表的数据结构非常复杂,因为每天的存储时间表只是让我们的搜索非常缓慢,而且表格很大。