Cercando di spostare la logica in DB - Sistema di prenotazione

1

Quindi sto pianificando un sistema di prenotazione delle risorse di base. Fondamentalmente avrò una stanza (risorsa) che ha il numero X di punti aperti per incremento di 30 minuti. Quando qualcuno riserva una risorsa, la memorizzerei come risorsa A è riservata dall'inizio alla fine.

Ora per trasmettere all'utente finale se sono disponibili spazi aperti per una risorsa in un dato momento. Devo controllare se il numero di prenotazioni (Y) in quella finestra di 30 minuti è inferiore al numero di punti aperti (X).

L'unico modo in cui posso pensare di farlo è inefficiente. Quella è interrogare le prenotazioni per il giorno, scorrere le ore del giorno e per ogni blocco di 30 minuti, contare il numero di prenotazioni in quel blocco (tramite il codice lato server invece che nel DB). Sono meno esperto di SQL.

Esiste un modo in cui posso eseguire tutto ciò sul lato DB in una query, quindi la query restituisce qualcosa come una riga per ogni risorsa e una colonna per ogni incremento di 30 minuti con i valori come numero di posti aperti / occupati?

Sono aperto a uno schema DB diverso, ma nel modo in cui lo vedo ho una tabella o risorse che indicano il tempo massimo di inizio-inizio per le prenotazioni, il numero di possibili aperture per periodo di tempo; una tabella di prenotazioni che indica quale risorsa era e l'ora di inizio della prenotazione.

    
posta Leeish 28.01.2015 - 16:53
fonte

1 risposta

1

Vorrei creare una tabella per rappresentare la stanza, forse:

Room
------------
RoomId (PK)
RoomNumber

Quindi una tabella per rappresentare una prenotazione:

Reservation
------------------
ReservationId (PK)
RoomId (FK)
StartTime
EndTime

Per un dato periodo, devi solo cercare tutte le prenotazioni valide per quel periodo, ad esempio per trovare quante prenotazioni tra le 10 e le 11, dovresti fare:

SELECT COUNT(*) FROM Reservations 
WHERE 
    RoomId = Room AND
    (StartTime >= 1000 AND StartTime <= 1100) OR
    (EndTime >= 1000 AND EndTime <= 1100)

Questa query SQL dovrebbe essere eseguita in modo estremamente rapido, quindi il ciclo su ciascun periodo di 30 minuti non richiederebbe molto tempo.

    
risposta data 28.01.2015 - 17:51
fonte

Leggi altre domande sui tag