0

アプリケーションの 1 つに機能を追加しようとしています。以下にサンプルを示します。

会社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 で datetime を使用することですが、各日 (日曜日から土曜日) ごとに 7 つの列を作成し、開始時刻から終了時刻までの異なる列を作成する必要があるようです。

次のアイデアは、これらの列を検索可能にして、フィルター処理できるようにすることです。たとえば、ユーザーが月曜日の午後 12 時を検索した場合、検索は月曜日 (開始時間) <= (ユーザー検索、午後 12 時) <= (終了時間) になります。

したがって、基本的には次のようになります。

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

これをコードレビューまたはプログラマーにプッシュしたい場合があります。あなたは正しい道を進んでいると思いますが、列を追加する代わりに、新しいテーブルを追加してください。と呼ばれる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 時all dayから午後 12 時までの範囲で行うのはあまり好きではありませんが、うまくいき、デザインをシンプルに保つことができます。

于 2013-04-08T15:18:41.283 に答える