sql >> Database >  >> RDS >> Mysql

Vrije plaatsen vinden in een boekingssysteem

Waarschijnlijk overkill voor uw toepassing - maar:

Een relatief eenvoudige manier om uw zoekopdrachten te verbeteren ten koste van het ingewikkelder maken van het 'schrijfproces', zou zijn om de boekingstabel te wijzigen in een 'beschikbaarheidstabel'.

Voeg een booleaanse kolom toe om aan te geven of het slot vrij of geboekt is (of beter nog, vul de id in van de klant die het heeft geboekt, en gebruik 0 als het slot vrij is).

Begin met een enkele vrije slot, 1 januari 2009 -> 31 december 20??

Wanneer u een boeking krijgt, verdeelt u het gratis slot in 3 (twee inserts en één update), het geboekte slot en de twee beschikbare slots.

Blijf dat doen en naarmate het tijdsbestek meer gefragmenteerd raakt, zal het boekingsproces uit een van de volgende bestaan:

  • Een volledig 'beschikbaar slot' aan iemand toewijzen (één update)
  • Een 'beschikbaar slot' in tweeën splitsen (een update en een insert)
  • Een slot in 3 splitsen (zoals hierboven) als iemand het middelste gedeelte boekt uit een beschikbaar slot.

Dat is niet ongelooflijk ingewikkeld om te beheren en het zoekproces wordt een eenvoudige zoekopdracht:het vinden van beschikbare slots in het vereiste tijdsbestek (booked=false of customerid=0, welke kant je ook op gaat) waarbij einddatum - startdatum>=het aantal aantal dagen dat je wilt.

Het verdubbelt de grootte van de boekings-/beschikbaarheidstabel en maakt boekingen minder eenvoudig, maar het nadeel is dat het zoekproces zo eenvoudig is als maar kan.



  1. SQL-query's

  2. LPAD() Functie in PostgreSQL

  3. Handleiding voor CTE in SQL Server

  4. MySQL importeer database maar negeer specifieke tabel