Pravděpodobně přehnané pro vaši aplikaci - ale:
Relativně jednoduchým způsobem, jak zlepšit své vyhledávání na úkor zkomplikování procesu „zápisu“, by bylo změnit tabulku Rezervace tak, aby se z ní stala tabulka „Dostupnost“.
Přidejte do booleovského sloupce, zda je slot volný nebo rezervovaný (nebo ještě lépe zadejte ID zákazníka, který si ho zarezervoval, a použijte 0, pokud je slot volný).
Začněte s jedním volným slotem, 1. ledna 2009 -> 31. prosince 20??
Když získáte rezervaci, rozdělte volný slot na 3 (dvě vložky a jedna aktualizace), rezervovaný slot a dva dostupné sloty.
Pokračujte v tom a jak se časový rámec bude stále více fragmentovat, rezervační proces bude sestávat z jednoho z následujících:
- Přiřazení celého „dostupného bloku“ někomu (jedna aktualizace)
- Rozdělení „dostupného slotu“ na dva (jedna aktualizace a jedna vložka)
- Rozdělení bloku na 3 (jak je uvedeno výše), pokud si někdo zarezervuje prostřední část z dostupného slotu.
To není neuvěřitelně složité na správu a proces vyhledávání se stává jednoduchým dotazem:nalezení jakýchkoli volných slotů v požadovaném časovém rámci, které jsou k dispozici (zarezervováno=false nebo customerid=0, ať se vydáte jakýmkoli směrem), kde koncové datum - počáteční datum>=číslo dní, které chcete.
Zdvojnásobuje velikost tabulky rezervací/dostupnosti a zjednodušuje rezervace, ale kompromisem je, že proces vyhledávání je tak snadný, jak jen může být.