私のアプリケーションには、スケジュールを持つプロバイダーと、スケジュールから予定を予約するクライアントがあります。次の機能が必要です。
プロバイダー:-繰り返し発生する可用性を指定できます。たとえば、月9-5、火10-3など。-データをブラックアウトできるようにします。たとえば、この月には利用できません。-繰り返し発生しない単一の日付/時刻スロットを追加できます。例-この土曜日9-5。
顧客:-単一の予定を予約できる。-定期的な予定を予約できるようになります。(毎週月9-4)。
これまでのところ、私は3つのオプションを考え出しました。
- スケジュールを30分間隔に分割し、間隔/プロバイダーのペアごとにデータベースエントリを作成します。各インターバルは無料または予約可能です。顧客が予約をするとき、私たちは間隔を予約済みとしてマークします。このアプローチの問題は、多くのスペースを浪費することであり、繰り返し予約する場合の検索パフォーマンスがどれほど優れているかはわかりません。
- 各可用性期間を「イベント」として保存します。再発する場合は、イベントを複製します。空きスロットを検索するときは、予約テーブルを検索して、重複する予約がないことを確認してください。この場合、繰り返し発生するスロットの検索は少し厄介なようです。来年の月9-5に利用可能なすべてのプロバイダーを見つけるには、一致するすべての「イベント」を検索し、52の一致するイベントがあるすべてのプロバイダーを見つける必要があります。
- 各可用性期間を「イベント」として保存します。繰り返し発生する場合はフラグを追加します。空きスロットを検索するときは、予約テーブルを検索して、重複する予約がないことを確認します。繰り返し発生する予定の検索が簡単になります。再発すると思われるスロットを「ブラックアウト」するには、偽の予約を挿入するだけです。