2013-04-08 36 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的大風扇,但它會工作,並保持你的設計簡單。

相關問題