如何在SQL中存储可用性信息,包括重复项

时间:2016-09-22 22:59:49

标签: sql database-design

所以我正在为一个管理许多救援人员的机构开发一个数据库。

救援人员在三个类别(白天,傍晚,夜晚)之一中设置每天的可用性。

我们还需要能够设置一些兼职救济工作人员,每周一次,每两周一次,并在一个例子中进行为期9周的轮换。由于我们已经在这里开发反复出现的可用模式,我们也可以给救援人员提供设置重复可用日期的选项。

我们还需要能够查询数据库,并确定某个员工是否在某一天可用。

但是这里有问题 - 我们需要能够使用变更数据捕获。所以我不确定计算可用性是否是最佳选择。

我的SQL原型表如下所示:

TABLE Availability Day
    employee_id_fk | workday (DATETIME) | day | eve | night (all booleans)| worksite_code_fk (can be null)

我真的很想如何围绕重复发生的事件。我可以在“x”日周期中创建一个模式,即一年后的可用性日期。但是,我们提前存储信息的时间有多远?当我们到达数据集的末尾时,我可以看到遇到问题。

我正在考虑存储说,6个月的信息,然后添加一个每月运行的服务器端任务,以保持表更新6个月的数据,但我的直觉告诉我这是一个糟糕的修复。

1 个答案:

答案 0 :(得分:1)

为了保证未来的绝对灵活性并保持数据不膨胀我的第一个想法就像是

  • 日历维度表 - 制作100年或无论您想要什么,都可以包含星期几信息等。
  • 时间维度表 - 小时,分钟,每15次,但仅限24小时
  • 转移表 - 每班1个记录,例如白天,傍晚和黑夜
  • 特定可用性表 - 与日历的关系&时间与开始&停止推荐每天1条记录,因此即使他们选择7天的范围,也可以将其分为每天1条记录和每班1条记录。
  • 重复可用性表 - 适用于星期几(1-7),月,周年,无论您能想到什么。但我再次考虑每个值1个记录,所以如果它们在周一和周二可用,则为2行。如果多次转移那么它将是多行。

现在和这里可能是奇怪的部分,我会在特定和重复可用性表上放置一个可用列,也许使它成为一个小的int并存储0不可用,1可用,2可能,3可用通知。

如果您想考虑可用性和通知,您也可以为此添加列,例如x#天。如果你想要充分的灵活性,那么它也可能成为一个相关的表格。

查询会很复杂但您可以使用存储过程或表值函数来定期处理它。