Вероятно прекалено за вашето приложение - но:
Сравнително прост начин за подобряване на вашите търсения за сметка на усложняването на процеса на „записване“ би бил да промените таблицата за резервации, за да я превърнете в таблица „Наличност“.
Добавете булева колона, за да посочите дали слотът е свободен или резервиран (или още по-добре въведете идентификатора на клиента, който го е резервирал, и използвайте 0, ако слотът е свободен).
Започнете с един безплатен слот, 1 януари 2009 г. -> 31 декември 20??
Когато получите резервация, разделете безплатния слот на 3 (две вмъквания и една актуализация), резервирания слот и двата налични слота.
Продължавайте да правите това и тъй като времевата рамка става все по-фрагментирана, процесът на резервация ще се състои от едно от следните:
- Задаване на цял „наличен слот“ на някого (една актуализация)
- Разделяне на „наличен слот“ на две (една актуализация и една вмъкване)
- Разделяне на слот на 3 (както по-горе), ако някой резервира средната секция от наличен слот.
Това не е невероятно сложно за управление и процесът на търсене се превръща в проста заявка:намиране на налични слотове в необходимия период от време (резервирани=false или customerid=0, както и да отидете), където крайна дата - начална дата>=числото от дните, които искате.
Това удвоява размера на таблицата за резервации/наличност и прави резервациите по-малко лесни, но компромисът е, че процесът на търсене е толкова лесен, колкото става.