Domanda

Stiamo cercando di aggiornare (riscrivere) il nostro sistema che memorizza informazioni su quando le persone possono prenotare stanze ecc. durante il giorno. In questo momento memorizziamo l'inizio e l'ora e la data in cui la stanza è disponibile in un tavolo e in un altro memorizziamo gli orari degli appuntamenti individuali.

In apparenza sembrava un'idea logica memorizzare le informazioni in questo modo, ma col passare del tempo e il sistema è stato sottoposto a un carico pesante, abbiamo iniziato a renderci conto che questa struttura di dati sembra essere inefficiente. (Diventa un'operazione intensiva per cercare tutte le stanze per gli orari disponibili e calcolare quando le stanze sono disponibili. Se la stanza è disponibile per un determinato tempo, è il tempo che è disponibile abbastanza a lungo per ospitare il tempo richiesto).

Abbiamo girato in tondo su come rendere il sistema più efficiente e riteniamo che ci debba essere un modo migliore per affrontarlo. Qualcuno ha suggerimenti su come procedere o ci sono posti dove cercare come costruire qualcosa del genere?

È stato utile?

Soluzione

Ho trovato questo libro stimolante e una lettura obbligata per qualsiasi tipo di database che coinvolga gestione del tempo / vincoli:

Sviluppo di applicazioni di database orientate al tempo in SQL

( Aggiunto dall'editore : il libro è disponibile online, tramite la la pagina iniziale di Richard Snodgrass . buon libro.)

Altri suggerimenti

@ Radu094 ti ha indicato una buona fonte di informazioni, ma sarà difficile farlo.

A un livello orribilmente pragmatico, hai considerato di registrare gli appuntamenti e le informazioni disponibili in una singola tabella anziché in due tabelle? Per ogni giorno, suddividere il tempo in "mai disponibile" (prima dell'apertura dell'ufficio, dopo la chiusura dell'ufficio - se ciò accade), "disponibile - può essere assegnato" e "non disponibile". Queste (due o) tre classi di prenotazioni verrebbero registrate a intervalli contigui (con orario di inizio e fine per ciascun intervallo in un singolo record).

Per ogni camera e ogni data, è necessario creare un set di prenotazioni "non in uso" (a seconda che si vada con "mai disponibile", il set potrebbe essere un record "disponibile" o potrebbe includere il record "mai disponibili" anche per il primo turno e il secondo turno.

Quindi devi capire quali domande stai ponendo. Ad esempio:

  • Posso prenotare la stanza X il giorno Y tra T1 e T2?
  • C'è spazio disponibile nel giorno Y tra T1 e T2?
  • A che ora del Giorno Y è ancora disponibile la Sala X?
  • A che ora del Giorno Y è disponibile una sala con capacità audiovisive e capacità per 12 persone?
  • Chi ha prenotato la stanza X durante la mattina del giorno Y?

Questo è solo un piccolo sottoinsieme delle possibilità. Ma con una certa cura e attenzione ai dettagli, le query diventano gestibili. Convalidare i vincoli nel DBMS sarà più difficile. Cioè, assicurando che se il tempo [T1..T2) è prenotato, nessun altro prenota [T1 + 00: 01..T2-00: 01) o qualsiasi altro periodo di sovrapposizione. Vedi Allen's Interval Algebra su Wikipedia e altri luoghi (incluso questo su uci.edu ).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top