おそらくあなたのアプリケーションにとってはやり過ぎでしょう-しかし:
「書き込み」プロセスをより複雑にすることを犠牲にして検索を改善する比較的簡単な方法は、予約テーブルを「可用性」テーブルに変更することです。
スロットが空いているか予約されているかを示すブール列を追加します(または、予約した顧客のIDを入力し、スロットが空いている場合は0を使用することをお勧めします)。
単一の空きスロットから始めます。2009年1月1日->12月31日??
予約を取得すると、空きスロットを3つ(2つの挿入と1つの更新)、予約されたスロットと2つの使用可能なスロットに分割します。
それを続けてください。時間枠が細分化されるにつれて、予約プロセスは次のいずれかで構成されます。
- 「使用可能なスロット」全体を誰かに割り当てる(1回の更新)
- 「使用可能なスロット」を2つに分割します(1つの更新と1つの挿入)
- 誰かが利用可能なスロットから中央のセクションを予約した場合、スロットを3つに分割します(上記のように)。
これは管理がそれほど複雑ではなく、検索プロセスは単純なクエリになります。必要な時間枠内で利用可能なスロットを検索します(booked=falseまたはcustomerid=0、どちらの方法でも)。ここで、enddate --startdate> =the numberあなたが望む日の数。
予約/可用性テーブルのサイズが2倍になり、予約が簡単になりますが、トレードオフとして、検索プロセスがほぼ同じくらい簡単になります。