2010-10-24 82 views
2

对于我的web应用程序,我需要处理访问请求。请输入星期一至星期日时间表,指定每天的小时数。本周时间表可以重复52次。处理日期和时间跨度的好方法?

  1. 检索/过滤
  2. 检测重叠请求

我想:用户可以一周(周一8-9和MON 10-11)有以下要求中有多个计划数据库来处理尽可能多的提升。现在我能想到的唯一设计是将每天的访问存储为单独的记录。这样做,我会拉一个用户的所有访问和循环,以确定新的请求是否重叠。这需要代码或存储过程。

有没有人有一个更好的数据库模型的想法或一个干净的方式来应对代码重叠?

+1

的单天的“记录”是非常原始的,不归。经常性事件以及52周的情况如何?对于经常性事件(没有人会对手动重复的事件感到高兴)以及52周?如何跨越一天的边界(23:00至01:00)?跨越一周的边界?你必须先自己做一些工作。期望人们为此提供完整的数据模型是不合理的。是的,我有一个完整的DM,在Production中工作,但不是,这是商业。 – PerformanceDBA 2010-10-25 14:48:52

+0

我不想要一个完整的数据模型。我不是DBA,我希望迈出正确的一步。在序列化数据之后,我现在还没有想到如何正常化的想法。粒度只需要一分钟,但您提到的所有内容都是非常好的问题。谢谢,我会考虑它 – ryan 2010-10-25 18:28:29

+1

好的。我不使用Colin的方法(BETWEEN等会导致工作表变慢),但是我可以使用存储MeetingStartTime和MeetingDuration的标准化(零重复)表来保证SQL代码或性能没有问题。 IE浏览器。 “跨度”不存储;每次实际会议只需一行;空白或冲突块可以很容易地识别。 “跨度”和经常性事件是预测。 – PerformanceDBA 2010-10-26 01:59:44

回答

2

如果存储与START_TIME和END_TIME字段表中的每个访问请求,那么你可以使用数据库的之间的功能,以确定是否一个特定的访问将同一个数据库中已有的重叠。

举个例子,比方说,有人已经完成了从周一上午9:00至下午12:00的访问请求。

然后别人来,并试图作出访问请求,在周一上午11点至下午3:00。为了确定这是否会与其他东西相冲突,你需要寻找以下可能的条件:

  • START_TIME <周一11:00 AM & & END_TIME>周一11:00 AM
  • START_TIME BETWEEN周一11: 00AM &周一3:00 PM
  • START_TIME ==周一11:00 AM || end_time ==星期一下午3:00

这些可以下注到SQL查询,这将防止加载和迭代应用程序中的记录。作为奖励,您可以使用交易来防范竞争状况。

+0

当他们输入一个请求时,他们输入每天的时间周。您的解决方案似乎更多地针对一天的访问。看看我的意思是有一个程序,因为在一个请求中你有7天的时间?你会改变你的方法吗? – ryan 2010-10-25 02:44:09

+0

以同样的方式,您还可以创建一个SQL查询,在您的WHERE子句中使用AND关键字一次验证所有七天。如果您需要单独验证每一天,那么我不确定 - 您可以执行七次数据库查找,或者找到一种方法从数据库返回查询中每天有YES/NO值的结果集。 – Collin 2010-10-25 02:57:37