View Full Version : Database per sistema di prenotazioni
Schum4k3r
22-11-2006, 17:29
Sto realizzando un sito per gestire le prenotazioni di uno chalet. Voglio fare in modo che inserendo una data o un periodo (es. 07/08/2006 oppure dal 01/06/2006 al 12/06/2006) si possa avere una situazione visiva dello stato degli ombrelloni, verde libero, rosso occupato. Volevo dei consigli su come realizzare il database. Per il momento mi è venuta in mente questa soluzione:
Fare una tabella con tutti gli ombrelloni e dei campi per i giorni del tipo si/no
es.
ombrellone - 01/06 - 02/06 ecc ecc
...
120 - si - no
121 - si - si
122 - no - no
...
La prenotazione di una persona spunta a si le caselle di quell'ombrellone nei giorni richiesti.
Pero' mi pare lungo e poi se uno chalet ha piu ombrelloni ci si mette parecchio a modificare il database.
Mi potreste aiutare?
Schum4k3r
23-11-2006, 09:29
up
mad_hhatter
23-11-2006, 16:04
parti dalla domanda fondamentale: cos'e' UNA prenotazione?
immagino conterra' info sul cliente, il periodo e l'obrellone.
il periodo e' una successione di giorni consecutivi o puo' essere frammentato?
dopo di che fai almeno 3 tabelle:
elenco clienti,
eventuale elenco ombrelloni, se i vari ombrelloni hanno info associate
elenco prenotazioni
un consiglio: non partire mai dalla struttura fisica del db, parti sempre dalla semantica degli oggetti che tratti e dalle relazioni logiche che intercorrono tra oggetti diversi. poi piano piano costruisci il db fisico
Schum4k3r
23-11-2006, 18:03
ti ringrazio intanto per la risposta:
prenotazione deve avere queste caratteristiche:
-un username(associato poi con una tabella clienti che contiene i dati)
-prenota un ombrellone
-per un periodo consecutivo di giorni(che puo anche essere un giorno solo)
-puo avere 0 o piu lettini
-puo avere 0 o piu sdraio
-puo avere o non avere la cabina(fino a un massimo di cabine utilizzabili)
Non so se fare una tabella ombrelloni visto che non hanno particolari caratteristiche, sarebbe utile solo sapere quanti ce ne sono nello chalet e come sono disposti (quante file e quante colonne) in modo da disegnare una mappina.
Io finora ho fatto una tabella ombrelloni con tutti gli ombrelloni e il campo "prenotato" del tipo "si/no"
mi interessava sapere se esiste una soluzione migliore.
grazie ancora.
giannola
23-11-2006, 18:36
ti ringrazio intanto per la risposta:
prenotazione deve avere queste caratteristiche:
-un username(associato poi con una tabella clienti che contiene i dati)
-prenota un ombrellone
-per un periodo consecutivo di giorni(che puo anche essere un giorno solo)
-puo avere 0 o piu lettini
-puo avere 0 o piu sdraio
-puo avere o non avere la cabina(fino a un massimo di cabine utilizzabili)
Non so se fare una tabella ombrelloni visto che non hanno particolari caratteristiche, sarebbe utile solo sapere quanti ce ne sono nello chalet e come sono disposti (quante file e quante colonne) in modo da disegnare una mappina.
Io finora ho fatto una tabella ombrelloni con tutti gli ombrelloni e il campo "prenotato" del tipo "si/no"
mi interessava sapere se esiste una soluzione migliore.
grazie ancora.
devi fare chiarezza sullo chalet e sulla cabina.
C'è un relazione tra lo chalet e gli ombrelloni ? Quale ?
e tra gli ombrelloni e le cabine ?
Devi avere chiaro questo per creare una struttura db coerente.
Al limite se sai che uno chalet ha 10 ombrelloni disponibili è un calcolo che puoi far fare al programma mentre il cliente visualizzerà solo la disponibilità relativa al periodo selezionato, d'altronde non credo che un cliente abbia una preferenza relativa all'ombrellone 3 piuttosto che al 5.
Schum4k3r
23-11-2006, 19:03
tra chalet e ombrelloni nessuna relazione.
unica cosa uno chalet ha x ombrelloni e y cabine disposti su m righe e n colonne.
Cmq all'utente interessa anche che ombrellone è visto che la prima fila (vicino al mare per interderci) può ad esempio costare di più
giannola
23-11-2006, 19:48
tra chalet e ombrelloni nessuna relazione.
unica cosa uno chalet ha x ombrelloni e y cabine disposti su m righe e n colonne.
Cmq all'utente interessa anche che ombrellone è visto che la prima fila (vicino al mare per interderci) può ad esempio costare di più
quindi la prenotazione deve essere obbligatoriamente comprensiva di ombrello, da decidere poi su quale fila (quindi cmq non è necessario selezionare il signolo ombrello, ma farli collocare per file dal sw, così il cliente avrà un qualunque ombrello della fila prescelta.)
Lascia perdere le matrici, piuttosto resta da capire se tu devi assegnare cmq tutte le cabine, per cui almeno una deve essere associata ad un ombrellone oppure non c'è quest'obbligo e quindi ti possono restare cabine non affittate o magari affittarle separatamente rispetto agli ombrelli.
Schum4k3r
23-11-2006, 19:51
si una prenotazione ha obbligatoriamente un ombrellone (e solo uno).
poi uno ha la facoltà di prenotare anche una cabina, sempre che questa sia ancora disponibile (ovviamente non ci sono tante cabine quanti ombrelloni, ce ne saranno una 25/30ina e oltre 100 ombrelloni). Cmq possono rimanere anche cabine non affittate e non si possono affittare solo cabine. Uno puo affittare 1 ombrellone solamente o 1 ombrellone e 1 cabina, ma non solo cabina.
giannola
23-11-2006, 20:18
si una prenotazione ha obbligatoriamente un ombrellone (e solo uno).
poi uno ha la facoltà di prenotare anche una cabina, sempre che questa sia ancora disponibile (ovviamente non ci sono tante cabine quanti ombrelloni, ce ne saranno una 25/30ina e oltre 100 ombrelloni). Cmq possono rimanere anche cabine non affittate e non si possono affittare solo cabine. Uno puo affittare 1 ombrellone solamente o 1 ombrellone e 1 cabina, ma non solo cabina.
Quindi devi prevedere anche una tabella delle cabine da collegare alla tabella prenotazioni con una foreign key.
mad_hhatter
23-11-2006, 20:29
tu devi gestire:
clienti, prenotazioni
un cliente avrà una serie di dati, una user_id e una pwd.
una prenotazione comprende: cliente, ombrellone, cabina letti e sdraio (facoltativi).
io direi di fare una tabella prenotazioni con le seguenti chiavi esterne:
- ombrellone (identificato dal numero e avente come dati anche il numero di riga e colonna qualora necessario),
- cliente che ha fatto la prenotazione
- cabina (come per l'ombrellone)
avendo chiavi esterne puoi mettere i soli ombrelloni e cabine occupati in 2 tabelle separate in modo da sapere se un ombrellone è occupato (sarà nella tabella) o è libero (il suo numero non sarà nella tabella)
per letti e sdraio puoi mettere un semplice contatore nel record della prenotazione, facendo però attenzione ad aggiornare un contatore master che tiene traccia del materiale ancora disponibile
Schum4k3r
23-11-2006, 20:41
tu devi gestire:
clienti, prenotazioni
un cliente avrà una serie di dati, una user_id e una pwd.
una prenotazione comprende: cliente, ombrellone, cabina letti e sdraio (facoltativi).
io direi di fare una tabella prenotazioni con le seguenti chiavi esterne:
- ombrellone (identificato dal numero e avente come dati anche il numero di riga e colonna qualora necessario),
- cliente che ha fatto la prenotazione
- cabina (come per l'ombrellone)
avendo chiavi esterne puoi mettere i soli ombrelloni e cabine occupati in 2 tabelle separate in modo da sapere se un ombrellone è occupato (sarà nella tabella) o è libero (il suo numero non sarà nella tabella)
per letti e sdraio puoi mettere un semplice contatore nel record della prenotazione, facendo però attenzione ad aggiornare un contatore master che tiene traccia del materiale ancora disponibile
tutto giustissimo, mi piace l'intuizione di mettere solo quelli occupati in tabella ;)
unico problema devo fare sempre come ho scritto nel primo post per sapere se in un dato giorno è prenotato o meno?
ps. per letti e sdraio si presuppone che ce ne siano infiniti quindi non ho bisogna di sapere se c'è materiale disponibile, di solito uno chalet ne ha in abbondanza.
mad_hhatter
23-11-2006, 20:46
nessuna intuizione, è solo una tecnica comune nella costruzione di db ;)
per trovare se un dato ombrellone è occupato in un dato periodo penso basti un semplice join tra la tabella delle prenotazioni e quella degli ombrelloni occupati: in questo modo hai in un solo record temporaneo tutti i dati relativi alla prenotazione e all'omrellone. dopo di che ti basta guardare se nel periodo da te scelto il dato ombrellone è già occupato.
Schum4k3r
23-11-2006, 20:51
eheh si vede che è il primo che faccio per un sito :)
cmq grazie per l'aiuto ora ci provo e vi faccio sapere ^^
mad_hhatter
23-11-2006, 20:53
eventualmente se avessi bisogno di prestazioni ottimizzate in fase di verifica delle disponibilità di vari ombrelloni in un dato periodo, si potrebbe optare per l'inserimento di una tabella ridondante che tenga traccia di tutte le associazioni ombrellone - periodo di occupazione. in tal modo avresti molta piu facilità a mostrare per ogni periodo la disponibilità meno di tutti i posti. al prezzo, però, di una maggiore attenzione in fase di aggiornamento dei dati del db perchè devi gestire la ridondanza!
mad_hhatter
23-11-2006, 20:53
eheh si vede che è il primo che faccio per un sito :)
cmq grazie per l'aiuto ora ci provo e vi faccio sapere ^^
tranquillo, abbiamo cominciato tutti da 0
e poi io so solo cose a livello didattico: ho realizzato un solo db serio fin'ora :)
Schum4k3r
23-11-2006, 20:54
eventualmente se avessi bisogno di prestazioni ottimizzate in fase di verifica delle disponibilità di vari ombrelloni in un dato periodo, si potrebbe optare per l'inserimento di una tabella ridondante che tenga traccia di tutte le associazioni ombrellone - periodo di occupazione. in tal modo avresti molta piu facilità a mostrare per ogni periodo la disponibilità meno di tutti i posti. al prezzo, però, di una maggiore attenzione in fase di aggiornamento dei dati del db perchè devi gestire la ridondanza!
Grazie ancora ;)
mad_hhatter
23-11-2006, 20:59
ripensandoci, forse l'idea della ridondanza non serve...
se tu hai il periodo da x a y per sapere tutti gli ombrelloni occupati basta cercare tutte le prenotazioni fatte per periodi compatibili con il tuo e per ognuna leggere l'ombrellone prenotato. non serve neanche leggere la tabella degli ombrelloni: basta leggere la chiave esterna che c'è nel record della prenotazione (posto che sia il numero dell'ombrellone, come è ragionevole)
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.