Mysql
 sql >> Database >  >> RDS >> Mysql

Trovare slot liberi in un sistema di prenotazione

Probabilmente eccessivo per la tua applicazione, ma:

Un modo relativamente semplice per migliorare le tue ricerche a scapito di rendere più complicato il processo di "scrittura", sarebbe modificare la tabella di prenotazione per renderla una tabella di "disponibilità".

Aggiungi una colonna booleana per indicare se lo slot è libero o prenotato (o meglio ancora inserisci l'id del cliente che lo ha prenotato e usa 0 se lo slot è libero).

Inizia con un unico slot gratuito, 1 gennaio 2009 -> 31 dicembre 20??

Quando ricevi una prenotazione, dividi lo slot gratuito in 3 (due inserti e un aggiornamento), lo slot prenotato e i due slot disponibili.

Continua a farlo e man mano che il lasso di tempo diventa più frammentato, il processo di prenotazione sarà composto da uno dei seguenti:

  • Assegnazione di un intero 'spazio disponibile' a qualcuno (un aggiornamento)
  • Dividi uno 'spazio disponibile' in due (un aggiornamento e un inserto)
  • Dividi uno slot in 3 (come sopra) se qualcuno prenota la sezione centrale di uno slot disponibile.

Non è incredibilmente complicato da gestire e il processo di ricerca diventa una semplice query:trovare eventuali slot disponibili nell'intervallo di tempo richiesto (booked=false o customerid=0, in qualunque modo tu vada) dove enddate - startdate>=il numero di giorni che vuoi.

Raddoppia le dimensioni della tabella di prenotazione/disponibilità e rende le prenotazioni meno semplici, ma il compromesso è che il processo di ricerca è facile come lo si arriva.