2016-09-22 18 views
0

因此,我正在为管理许多救援人员的机构开发数据库。如何在SQL中存储可用性信息,包括经常性项目

救济工作人员每天在三类(白天,傍晚,夜间)之一设置其可用性。

我们还需要能够将一些兼职救援人员设置为每周,每两周一次以及在一次9周轮换中忙碌。由于我们已经在此开发反复出现的可用性模式,因此我们也可以让救援人员选择设置经常性可用天数。

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

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

我的SQL的原型表看起来是这样的:

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

我真的很挣扎如何满脑子都在重复事件。我可以在'x'日周期中创建一个可用天数的年份。但是,我们提前多久存储信息?当我们到达数据集的末尾时,我可以看到遇到问题。

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

+0

如果_But提前多久存储信息?_是问题,那么意见会有所不同。 –

+0

我想在这里使用日历表,然后存储重复信息以及一次性信息。 –

回答

1

对于未来绝对的灵活性和腹胀我首先想到的会是这样的

  • 日历维度表保持数据的 - 让它像100年任何你想要让它包括一周中的一天信息等
  • 时间维度表 - 小时,分钟,每隔15什么都但仅限于24小时内
  • 班次表 - 1元希夫记录t例如白天,晚上和夜间
  • 具体情况见表 - 关系到日历&时间开始&停止推荐每天1条记录,这样即使他们选择了一系列7天拆分到1个记录perday和每班1项纪录。
  • 周期性可用性表 - 对于星期几(1-7),月,WeekOfYear,无论您能想到什么。但是,我再次考虑每个价值1记录,所以如果星期一和星期二可用,那将是2行。如果多班次,那么它会是多行。

现在和这里可能是奇怪的部分,我会在特定和循环可用性表中放置一个可用列,可能会使它成为一个小的int并存储类似于0的不可用,1可用,2可能可用,3可以通知。

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

查询会很复杂,但您可以使用存储过程或表值函数来相当常规地处理它。

+0

感谢您花时间写下。 我这样的思考: http://stackoverflow.com/questions/5061749/repeat-event-calendar-based-database-design 在哪里,使那里的方法为我工作,使用位掩码捕捉周期内发生的重复。我喜欢日历维度表的想法,但我想简化过程。 –

+1

@ScubaSveve日历维度非常简单,最终您将需要它或不得不在飞行中生成它。我不确定你引用的那篇文章的哪一部分,你的意思是你正在考虑沿着这条线。但是如果你在我的答案中使用了结构,那么这个例外就会成为一个特定的可用性记录,表明不可用。我想你可以合并具体的可用性和重复性,似乎有点整齐地思考独立表中的逻辑,特别是因为数据结构会不同......祝你好运,无论你选择哪条路线 – Matt

相关问题