【发布时间】:2011-06-15 21:48:47
【问题描述】:
我最近采用了一个带有 Employee 模型的项目,该模型需要包含该人的可用时间作为属性。
现有表单使用 168 个复选框来表示一周中的每个小时,并将信息以 7 个 24 位二进制字符串的形式存储在数据库中,每个位作为当天对应小时的布尔值 true 或 false。
我真的很想过渡到更优雅和更易于管理的东西,但我无法提出任何与现有实施灵活性相匹配的简单解决方案。
当每天可能有多个时间段时,将时间段存储为开始时间和结束时间可能同样繁琐,并且可能会使查询特定时间的可用性变得更加复杂。
在用户界面和数据库结构中是否有处理此类信息的最佳实践?
【问题讨论】:
-
PostgreSQL 原生支持时间间隔作为数据类型。
-
这绝对是个好消息,但我不确定它是否真的能解决问题。如果我没记错的话,这些间隔与特定的开始或结束时间无关,因此必须将它们用作更复杂的数据结构的一部分来表示所有必需的信息。我想我真正想要的是一种干净、易于管理的方式来输入、存储和查询 168 个布尔值。或者更好的方式来表示一周中的每个小时。
-
您可以将间隔字段与日期字段配对,这样日期字段将给出开始时间,间隔给出持续时间。不知道这比只有两个日期字段好还是坏;这取决于您想要运行的语义和查询。
-
大多数查询只是检查用户是否在给定时间段内有空。这种表示可能会变得复杂,因为查询开始时间不一定与属性开始时间匹配。您必须在查询时间之前搜索开始时间,并且持续时间超过查询持续时间。您还必须验证模型中没有重叠的时段。
-
时间是一个非常讨厌建模的东西。
标签: javascript sql ruby-on-rails