Prenotazione spazi

di il
21 risposte

Prenotazione spazi

Buongiorno a tutti e grazie del benvenuto nel forum.
Spero che qualcuno possa essermi di aiuto.
Arrivo al punto:
sto costruendo un db relativo alla gestione di un oratorio in cui devo inserire dati riguardanti la gestione "spazi".
Questi spazi sono:
- prenotabili da più persone
- prenotabili anche tutti assieme
- non prenotabili nello stesso intervallo orario dello stesso giorno.
Questo è il problema.
Ho costruito le seguenti tabelle:
-data ( ID,prenotato per il,dalle, alle, spazi )
-prenotazioni (ID,cognome,nome,id tipologia richiedenti,id prenotato per il, ecccc..)
-tipologia richiedenti (ID, tipologia)
Dovrei fare in modo che l'ipotetico turnista che si trova davanti allo schermo, possa introdurre tutti i dati utili e che appena si accinge a prenotare per quel giorno e per quell'intervallo orario, già prenotato per quello spazio/i, venga avvisato dal sistema che questo è impossibile.
Ho provato con qualche query, come qualcuno mi suggeriva, ma il problema non si risolve.
Immagino si debba dare al db una istruzione visual basic che purtroppo non conosco abbastanza Potete aiutarmi? (non posso inviare file perchè il sistema non me lo permette, credo)
Grazie in anticipo
Glauco

21 Risposte

  • Re: Prenotazione spazi

    Per me c'è qualcosa di errato nella impostazione tabelle. Non comprendo l'utilità della tabella TipologieRichiedenti. Io penserei il tutto così:

    Persone
    IDPersona (contatore, chiave primaria)
    Cognome
    Nome
    Indirizzo
    ...altri campi tipicamente anagrafici...

    Spazi
    Spazio

    Eventi
    IDEvento (contatore, chiave primaria)
    TimeInizio
    TimeFine
    Spazio

    Partecipazioni
    IDPartecipazione (contatore, chiave primaria)
    IDPersona (numerico)
    IDEvento (numerico)

    Relazioni:
    Spazi.Spazio uno-a-molti con Eventi.Spazio
    Persone.IDPersona uno-a-molti con Partecipazioni.IDPersona
    Eventi.IDEvento uno-a-molti con Partecipazioni.IDEvento

    Mi fermo qui per il momento, per una pausa di riflessione. Poi possiamo analizzare meglio cosa vuoi fare.
  • Re: Prenotazione spazi

    Buongiorno Osvalo,
    ho provveduto a creare le tabelle da te indicate.
    (la tipologia mi serve per indicare quale tipo di utente prenota, ad esempio: catechesi, parrocchia, compleanni, ecc in modo tale da poter poi fare statistiche, ma forse si risolve in altro modo..)
    Intanto ti ringrazio di questo primo approccio ed ho notato infatti che crendo le relazioni vi è un flusso diretto, diverso da quello che in un primo momento avevo immaginato (un po confusionario, in effetti)
    Possiamo, se vuoi continuare.
    Aspetto tue notizie ed ancora grazie per l'interessamento
    Glauco
  • Re: Prenotazione spazi

    Crea una tabella Tipologie con un solo campo testo Tipologia in cui metti i valori:
    Catechesi
    Compleanno
    Parrocchia
    ...altri valori...

    La tabella Eventi può essere migliorata con i seguenti campi:
    IDEvento
    TimeInizio
    TimeFine
    Tipologia
    Descrizione
    Spazio

    Crea una relazione Tipologie.Tipologia uno-a-molti con Eventi.Tipologia

    Per fare statistiche sulle Tipologie e sulle Persone che frequentano gli Eventi con tali Tipologie, devi predisporre opportune query...dipende cosa vuoi sapere...
  • Re: Prenotazione spazi

    Grazie della risposta.
    Ho provveduto ed ho fatto come suggerisci.
    Le query le potrei più facilmente affrontare in un secondo tempo.
    Problema:
    a) Gli spazi possono anche essere prenotati tutti (sono veramente tanti: sala1,2,3,...8..n) ed appartenenti anche a due luoghi diversi)

    b) non prenotabili nello stesso intervallo orario dello stesso giorno (questo è il vero scoglio)

    Cosa ne pensi?
  • Re: Prenotazione spazi

    glaucoperez ha scritto:


    Gli spazi...sono veramente tanti: sala1,2,3,...8..n ed appartenenti anche a due luoghi diversi
    Cerca di rendere OGNI SPAZIO univoco nella tabella Spazi. Se un campo dovesse risultare insufficiente, crea più campi...penso ci arrivi da solo a capirlo.

    glaucoperez ha scritto:


    Spazi...non prenotabili nello stesso intervallo orario dello stesso giorno (questo è il vero scoglio)
    Capisco. Penso che ci sarebbero più soluzioni al riguardo, alcune facili e intuitive, altre più complicate. Ti elenco alcune che mi vengono in mente:

    A) Se crei un "Indice Multicampo Univoco" sui campi TimeInizio, TimeFine e Spazio, impedisci all'input dati di ripetersi/accavallarsi esattamente su 3 valori coincidenti...Il difetto di questa soluzione sarebbe se per caso hai previso un Evento dalle 17:00 alle 18:30 in Sala1 e poi un altro dalle ore 17:30 alle 19:30 in Sala1, questi due Eventi verrrebbero accettati ugualmente, in quanto non esattamente uguali sui 3 campi...ma ovviamente (praticamente parlando) sono incompatibili.

    B) Spartanamente/intuitivamente parlando, se crei una maschera/sottomaschera Spazi/Eventi, per ogni Spazio visibile in alto, potresti avere "al volo" una occhiata di tutti i suoi Eventi e decidere "umanamente" se puoi o non puoi inserire un nuovo Evento.

    C) Soluzione più complicata. Occorre una query (o forse un codice VBA) che controlli i 3 soliti campi in maniera "matematica" e "sistematica" in modo che non si creino accavallamenti incompatibili. Occorre però lavorare accuratamente su calcoli di tempo...Confesso che non amo molto manipolare i campi DataOra per operazioni di questo genere e troverei un rompicapo tentare di risolvere in questa direzione.
  • Re: Prenotazione spazi

    Ti ringrazio come sempre per la puntualità e per la chiarezza espositiva.
    Non è da molto che lavoro con access ma, seguendo esempi on-line ho cominciato a capire qualcosa.
    Le soluzioni che proponi sono interessanti e a logica ci ero arrivato, per la verità un tantino "confusamente".
    La prima soluzione che proponi è quella che ad intuito avevo pensato per prima, ma essendoci troppe variabili nelle prenotazioni la cosa si rivelebbere poco pratica, per giunta, dopo l'esempio che fai, non percorribile.
    La seconda soluzione ripropone le prenotazioni, come fino ad ora si prendono, guardando su una tabella cartacea composta con calc di openoffice. Il turnista guarda le sale occupate e decide al volo di darle o non darle. Questa soluzione che tu giustamente chiami "umana" è forse migliore della prima.
    Però a me interesserebbe che il sistema impedisse (credo con visual basic? di cui non conosco quasi nulla) proprio la prenotazione in automatico.
    E' possibile reperire on-line esempi del genere? Io non ho trovato nulla fin'ora. Spero che col tuo aiuto riesca a combinare qualcosa
    Per ora grazie
    Glauco
  • Re: Prenotazione spazi

    glaucoperez ha scritto:


    Però a me interesserebbe che il sistema impedisse (credo con visual basic? di cui non conosco quasi nulla) proprio la prenotazione in automatico.
    E' possibile reperire on-line esempi del genere?
    Non mi sento adeguatamente esperto per risolvere in questa direzione.
    Non credo sia facile/possibile reperire esempi del genere.
  • Re: Prenotazione spazi

    Anche se non siamo arrivati alla soluzione ti sono grato dell'aiuto e dell'impegno.
    Grazie
    Glauco
  • Re: Prenotazione spazi

    Eppure io cercherei di rendere la questione più realistica possibile. Piuttosto che inserire dati passivamente e il sistema dovrebbe (con dei calcoli troppo complicati da progettare) andarli a inserire qualora ci fossero le condizioni favorevoli...io ritengo che tu utente dovresti sempre avere un minimo di controllo umano. Intendo dire che potrebbe anche capitare che Tizio vuole prenotare una Catechesi in Sala5. Magari Tizio non si rende conto che Sala5 potrebbe essere troppo grande o troppo piccola (insomma inadeguata), oppure troppo vicina a Sala6 dove nel frattempo c'è una FestaCompleanno.
    Io penserei a un meccanismo di controllo che sia una via di mezzo fra le mie Soluzione2 e Soluzione3. Una (o più) query non poi così difficile da progettare, potrebbe filtrare dalla tabella Eventi, almeno la singola Data, oppure il singolo Spazio, oppure entrambi, ma in ogni caso far passare un minimo di controllo da un paio di query che mostrino ad esempio:
    - Tutti gli Eventi in Data X
    - Tutti gli Eventi in Spazio Y
    - Tutti gli Eventi in Data A e Spazio B
    Queste query permetterebbero un colpo d'occhio su casi "reali" (perchè ritengo che in fin dei conti le cose vadano così).
    Dopo un rapido controllo della situazione, si decide di inserire correttamente il nuovo Evento.
  • Re: Prenotazione spazi

    Ancora grazie Osvaldo per l'interessamento.
    Mi hai convinto.
    Posso provare a completare il DB ed iniziare lo studio delle query e della procedura che mi suggerisci.
    Anche io sono convinto che il controllo umano è forse migliore qualitativamente parlando.
    Spero di riuscire. Semmai posso ancora chiederti aiuto?
    Glauco
  • Re: Prenotazione spazi

    Siamo in tanti nel forum a fornirti aiuto. Puoi formulare tante altre nuove discussioni. Ti consiglio, se una discussione prende una piega che comincia a divergere troppo dal tema principale, è meglio se apri una nuova discussione. Ridescrivi tutto dettagliatamente per essere chiaro a chiunque voglia leggerti. Se ci sono stretti legami con thread (discussioni) precedenti, ti conviene indicare il link corrispondente.
  • Re: Prenotazione spazi

    Grazie. Allora a risentirci e mi atterro' ai tuoi consigli. Buona giornata
    Glauco
  • Re: Prenotazione spazi

    Mia piccola proposta variante nell'organizzazione campi in tabella Eventi.
    Come ti dicevo precedentemente, trovo un po' rognosi da gestire i campi di tipo Data/Ora. Sono anche i più rognosi da digitare. Per come li avevo pensati inizialmente, TimeInizio e TimeFine prevederebbeo il formato Data+Ora in entrambi i campi. Devi quindi avere cura di digitare / per la data, poi lo spazio per separare da Ora e : per dividere mm:ss. Sfido chiunque non abbia mai digitato senza imbranarsi almeno una volta. Nel tuo caso (immagino) gli Eventi non si accavallerebbero mai tra una data e un altra...ossia vedrei alquanto improbabile che un Evento inizi 11/11/2014 23:00 e termini 12/11/2014 1:00. Qui devi essere tu a valutarne l'utilità...mentre scrivo...forse mi accorgo che ci potrebbero essere eventi tipo (invento) "Veglia di Natale" o "Veglia di Pasqua" o "Capodanno"...non saprei. Se la mia ipotesi è realmente improbabile, io organizzerei i campi di Eventi così:
    IDEvento
    DataEvento (Formato solo Data)
    OraInizio (Formato solo Ora (24h))
    OraFine (Formato solo Ora (24h))
    Tipologia
    Descrizione
    Spazio (o IDSpazio)

    Questo semplificherebbe ulteriormente l'eventuale creazione di un filtro sul solo campo DataEvento.
  • Re: Prenotazione spazi

    Come sempre grazie dell'interessamento.
    Riassumendo:
    Ho creato le tabelle
    Eventi:
    IDEvento (contatore, chiave primaria)
    Prenotato per il (formato solo data 24h)
    OraInizio (formato solo ora)(indicizzato,duplicati non ammessi ?)
    OraFine(formato solo ora)(indicizzato,duplicati non ammessi?)
    IDTipologia(numerico)
    Descrizione
    IDSpazio(numerico)
    Data(di quando si effettua la prenotazione, importante per la priorità..)

    Tipologie:
    IDTipologia(contatore,chiave)
    Catechesi
    Compleanno
    ecc

    Spazi:
    IDSpazio (contatore, chiave)
    Sacco_Sala3
    Sacco_Sala4
    ecc
    SanGiorgio_Teatro
    SanGiorgio_SalaN
    eccc

    Partecipazioni:
    Partecipazioni (o prenotazioni):
    IDPartecipazione (contatore,chiave)
    IDPersona (numerico)
    IDEvento(numerico)

    Persone (Utenti):
    IDPersona (contatore, chiave)
    Cognome
    nome
    ecc..

    Relazioni:
    Tipologie. (IDTipologia 1 a molti con IDTipologia di Eventi)
    Spazi. (IDSpazio 1 a molti con IDSpazio di Eventi)
    Eventi. (IDEvento 1 a molti con IDEvento di Partecipazioni)
    Persone(Utenti). (IDPersona 1 a molti con IDPersona di Partecipazioni)

    E' corretto sin'ora (a parte nella tab.eventi con i campi orainizio e orafine indicizzati con duplicati non ammessi...?)

    Mi puoi indicare quali query dovrei creare per lo scopo che sai?
    Grazie in anticipo
    Glauco
Devi accedere o registrarti per scrivere nel forum
21 risposte