sql >> Databasteknik >  >> RDS >> Mysql

Hitta lediga platser i ett bokningssystem

Förmodligen överdrivet för din applikation - men:

Ett relativt enkelt sätt att förbättra dina sökningar på bekostnad av att göra "skrivprocessen" mer komplicerad är att ändra bokningstabellen så att den blir en "Tillgänglighetstabell".

Lägg till i en boolesk kolumn för att indikera om spelplatsen är ledig eller bokad (eller ännu hellre ange id för kunden som har bokat den, och använd 0 om spelplatsen är ledig).

Börja med en enda ledig plats, 1 januari 2009 -> 31 december 20??

När du får en bokning dela upp den lediga luckan i 3 (två inlägg och en uppdatering), den bokade luckan och de två tillgängliga luckorna.

Fortsätt göra det och när tidsramen blir mer fragmenterad kommer bokningsprocessen att bestå av något av följande:

  • Tilldela en hel "tillgänglig plats" till någon (en uppdatering)
  • Dela upp en "tillgänglig plats" i två (en uppdatering och en infogning)
  • Dela en plats i 3 (enligt ovan) om någon bokar mittsektionen från en tillgänglig plats.

Det är inte otroligt komplicerat att hantera och sökprocessen blir en enkel fråga:att hitta tillgängliga platser inom den önskade tidsramen (bokat=falskt eller kund-id=0, vilken väg du än går med det) där slutdatum - startdatum>=numret antal dagar du vill ha.

Det fördubblar storleken på boknings-/tillgänglighetstabellen och gör bokningar mindre enkla, men avvägningen är att sökprocessen är ungefär så enkel som den blir.



  1. ScaleGrid DBaaS nominerad till Cloud Excellence Awards 2018

  2. Postgres now() tidsstämpel ändras inte när skriptet fungerar

  3. Psycopg2, Postgresql, Python:Snabbaste sättet att bulkinfoga

  4. PostgreSQL-handledning för nybörjare – Allt du behöver veta om PostgreSQL