0

我正在尝试在我的一个应用程序上添加一项功能。这是一个示例:

公司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 列,并为开始时间创建不同的列以打开关闭时间。

下一个想法是使这些列可搜索,以便我能够过滤它们。例如,如果用户搜索 Monday 12PM,则搜索将是 Monday (open time) <= (user search, 12pm) <= (close time)。

所以基本上,它将类似于:

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。问题是如何使用上述技术设计/实现此功能。

任何想法/提示将不胜感激。谢谢!

4

1 回答 1

1

可能想将此推送给 codereview 或程序员。我认为您走在正确的道路上,但不是添加列,而是添加一个新表。叫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。您只需插入一条新记录,它就会起作用。我不喜欢all day在上午 12 点到下午 12 点的范围内进行操作,但它会起作用,并使您的设计保持简单。

于 2013-04-08T15:18:41.283 回答