2013-04-08 45 views
0

我想在我的一个应用程序中添加一个功能。下面是一个示例:需要设计思路:C#和SQL Server的可搜索时间/日期时间

公司ABC

Business hours: 
Sunday closed 
Monday 7am - 5pm 
Tuesday 7am - 5pm 
Wednesday 7am - 5pm 
Thursday 7am - 5pm 
Friday 7am - 5pm 
Saturday closed 

公司DEF

Sunday 10am - 12pm 
Monday 8am - 4pm 
Tuesday 8am - 4pm 
Wednesday 8am - 4pm 
Thursday 8am - 4pm 
Friday 8am - 4pm 
Saturday closed 

现在,我想要做的是让我的用户能够搜索/过滤营业时间。例如,只返回周一下午2点或周六下午1点或周一开放的商家。

我的想法是在SQL Server中使用日期时间,但现在看来我可能需要每天做7列(星期日至星期六)和起动时间开到打烊时间来打开不同的列。

下一个想法是使这些列可搜索,以便我能够过滤它们。例如,如果用户搜索星期一12PM,则搜索将是星期一(开放时间)< =(用户搜索,12pm)< =(关闭时间)。

所以基本上,这将是类似于:

SELECT * 
FROM Companies 
WHERE [user_search_time] IS "BETWEEN open_time AND close_time WHERE day=[user_search_day] 

我有一个很难设计这个,更不用说如何实现它。

使用的技术是C#/ ASP.Net和SQL Server 2008. 问题是如何使用上述技术设计/实现此功能。

任何想法/技巧将不胜感激。谢谢!

回答

1

可能要推这代码审查,或程序员。我认为你在正确的道路上,但不是添加列,而是添加一个新表。叫做business_hours

BUSINESS_HOURS 
business (company fk) 
open_time (datetime) 
close_time (datetime) 
day (M,T,W,TH,F,S,Sun) // you can do this however u want 1-7 would work as well 

然后你的查询和你的查询几乎一样。

SELECT * 
FROM 
    business_hours 
WHERE 
    business = user_company_id 
    [user_search_time] IS BETWEEN open_time AND close_time and 
    day=[user_search_day] 

好处表是它更非规范化的,你可以支持在他们休息时间。我可以支持12-2以及5-8。你只需插入一个新的记录,这是可行的。我不这样做,从中午12点的范围内时至中午12做all day的大风扇,但它会工作,并保持你的设计简单。