sql >> Databáze >  >> RDS >> Mysql

Hledání volných slotů v rezervačním systému

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.



  1. Různé způsoby porovnání schématu a dat tabulek SQL Server

  2. Výpočet hodnoty pomocí předchozí hodnoty řádku v T-SQL

  3. Jak používat klauzuli ORDER BY v SQL?

  4. Funkce SYSTIMESTAMP v Oracle