2010-04-27 8 views
17

Nel database dei miei negozi ho bisogno di avere gli orari di apertura. Hai un'idea di come posso implementarlo nel mio dB?SQL per gli orari di apertura

L'apertura ore sono dal Lunedi alla Domenica, ogni giorno può avere 2 finestre di apertura (ex 09: 00-12: 00, 16: 00-19: 00)

risposta

32

costruire un altro tavolo, lo chiamano schedules, aggiungere una chiave esterna alla chiave primaria del tavolo shops, un campo Day of week, time_open, time_closed. I dati dovrebbero essere simile a questa:

shop_id  day_of_week  time_open  time_closed 
1   1    09:00   12:00 
1   1    16:00   19:00 
1   2    09:00   12:00 
1   2    16:00   19:00 
1   3    09:00   12:00 
1   3    16:00   19:00 
1   6    10:00   14:00 
2   1    09:00   12:00 
2   1    13:00   18:00 

Questo vi darà l'opportunità di costruire qualsiasi tipo di programmi, con il maggior numero di finestre che si desidera, con il numero di eccezioni che vi serve. È universale, limitato solo al fatto che si aspetta che tutte le settimane siano identiche. Nessuna festività considerata, né pianificazioni dispari/pari della settimana che qualcuno potrebbe usare.

Edit:
Con domanda di Julien, sugli orari di un'azienda che lavora di notte, si è giunti alla mia attenzione che la soluzione precedente non è la migliore bu lontano. Non puoi aprire un bar alle 20:00, chiudere alle 06:00 e confrontare se l'ora corrente (02:45) si trova all'interno di questo intervallo, perché non lo sarà. Ecco perché sarebbe più conveniente registrare non il tempo di chiusura, ma il tempo totale di lavoro, nella comoda unità di misura (ad esempio minuti).

shop_id  day_of_week  time_open  working_time 
1   1    09:00   180 
1   1    16:00   180 
1   2    09:00   180 
1   2    16:00   180 
1   3    09:00   180 
1   3    16:00   180 
1   6    10:00   240 
2   1    09:00   180 
2   1    13:00   300 
+1

questo ti permetterà di aggiungere un terzo programma per un dato giorno, se questa è una violazione delle tue regole, dovrai controllare attentamente l'aggiunta di nuovi programmi per verificarlo ... o potresti aggiungere un " sched_num "con un vincolo check che può essere 0 o 1 e un vincolo univoco su day_of_week e sched_num. –

+1

che è il modo migliore per gestire gli orari di apertura di un locale notturno, come un bar, aperto dalle 22:00 alle 04:00. Aggiungi due voci (giorno1: 22: 00-> 23:59 e giorno2: 00: 00-> 04:00)? o una voce (giorno 1: 22: 00-> 04:00)? – Julien

+1

Interessante domanda. In questo caso sarebbe più ragionevole ri-fare questa situazione. Vedi la risposta modificata. – AlexanderMP

5

Che tipo di database stai usando? Se è mysql, inserisci un campo di tipo "time". Quindi è possibile passare le volte e fare manipolazioni di base sql time su di loro. L'intero post assume mysql.

Se c'è un solo negozio e si sa che non crescerà mai, basta creare una tabella chiamata orari in cui si mantengono le ore in cui il negozio è aperto. Quindi, se vuoi vedere se il negozio è aperto, controlla l'ora corrente con uno degli intervalli nel database.

Se c'è più di un negozio, creare una tabella denominata "orari" e una tabella denominata "negozi". Nella tabella orari, le colonne possono essere "aperte" e "chiuse" con un ID chiamato "store_id". La tabella dei negozi ha bisogno anche di un id. Quindi, puoi solo dire:

"SELECT open, close FROM times WHERE store_id=x" 

Questo ti darà TUTTI gli intervalli di tempo associati al negozio particolare.