Buonasera,
per un esame, insieme ad un mio collega, sto realizzando un sistema in grado di gestire le prenotazioni presso degli stabilimenti balneari.
In linea generale abbiamo queste tabelle nel database:
- utenti(ID, nome, cognome,..)
- lidi(ID, nome, descrizione,..)
- ombrelloni(ID, ID_lido, ) FK ID_lido =lidi.ID
- prenotazioni(ID, ID_utente, data_inizio, data_fine,..) FK ID_utente=utenti.ID
- prenotazioni_ombrelloni(ID_prenotazione, ID_ombrellone) FK ID_prenotazione = prenotazioni.ID , ID_ombrellone=ombrelloni.ID
Il problema è che non so quale sia il modo corretto per gestire la prenotazione.
Fatta molto stupidamente, avendo una nuova prenotazione con data_inizio e data_fine e n_posti, estraevo dal database tutti i posti che non erano prenotati nel periodo [data_inizio:data_fine](elimino tutti i posti che hanno delle prenotazioni che intersecano il periodo della nuova prenotazione) e nel caso in cui fossero stati in numero maggiore di n_posti, allora sarei andato ad assegnare i primi n_posti alla nuova prenotazione.
A mio avviso una gestione del genere non è per nulla corretta, perché magari potrebbero rimanere degli ombrelloni scoperti.
Qualcuno potrebbe consigliarmi come poter gestire meglio tutto questo?
Io avevo pensato alla possibilità di avere due tipi di prenotazione, random e con scelta del posto.
Con la scelta del posto giorno per giorno si potrebbe scegliere il posto libero, oppure cercare gli ombrelloni che sono liberi per tutto quel periodo, mentre con random vado ad assegnare dei posti a caso, che potrebbero non essere sempre lo stesso per tutti i giorni.
Per fare questo andrei a creare una nuova tabella temporanea dove ad ogni scelta vengono caricati i dettagli della prenotazione e dei posti scelti e solamente una volta che l'utente conferma quella tabella va a caricare le tabelle definitive. Naturalmente per il controllo dei posti liberi non mi appoggio più solamente sulle tabelle fisse, ma andrei anche a controllare anche quelle temporanee per evitare che due utenti si vedano assegnati lo stesso posto perché lo fanno quasi in contemporanea.
Pareri? Scusate la lunghezza del post e scusate se ho sbagliato sezione.