处理日期和时间跨度的好方法?

时间:2010-10-24 19:01:28

标签: c# database entity-framework database-design data-modeling

对于我的网络应用程序,我需要处理访问请求。输入星期日 - 星期日时间表的请求,指定每天的小时数。本周时间表最多可重复52次。用户可以在一周内拥有多个时间表(星期一8-9和星期一10-11)。有以下要求:

  1. 检索/过滤
  2. 检测重叠请求
  3. 我希望数据库尽可能多地处理。现在我能想到的唯一设计是将每天的访问权限存储为单独的记录。这样做我将拉取用户的所有访问并循环以确定新请求是否重叠。这需要代码或存储过程。

    有没有人有更好的数据库模型想法或处理代码重叠的简洁方法?

1 个答案:

答案 0 :(得分:2)

如果将每个访问请求存储在包含start_time和end_time字段的表中,则可以使用数据库的BETWEEN功能来确定特定访问是否与数据库中已存在的访问重叠。

例如,假设有人在星期一上午9:00到中午12:00完成了访问请求。

然后其他人来到并尝试在星期一上午11:00到下午3:00提出访问请求。要确定这是否与其他内容发生冲突,您需要查找以下可能的条件:

  • start_time<星期一上午11点&& end_time>星期一上午11:00
  • start_time BETWEEN周一上午11:00&星期一下午3:00
  • start_time ==星期一上午11:00 || end_time ==星期一下午3:00

这些可以转换为SQL查询,这将阻止必须加载和迭代应用程序中的记录。作为奖励,您可以使用交易来防范竞争条件。