2010-04-27 1 views
17

In meiner Shop-Datenbank muss ich die Öffnungszeiten haben. Hast du eine Idee, wie ich das in meinem dB umsetzen kann?SQL für Öffnungszeiten

Die Öffnungszeiten von Montag bis Sonntag, kann jeder Tag 2 zu öffnende Fenster hat (ex 09: 00-12: 00, 16: 00-19: 00)

Antwort

32

baut eine andere Tabelle, nennt es schedules, Fügen Sie dem shops Tabellenprimärschlüssel, einem Day of week-Feld, time_open, time_closed einen Fremdschlüssel hinzu. Die Daten wie folgt aussehen sollte:

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 

Diese Ihnen die Möglichkeit geben, jede Art von Zeitplänen zu bauen, mit so viele Fenster wie Sie wollen, mit wie vielen Ausnahmen, die Sie benötigen. Es ist universal, nur darauf beschränkt, dass alle Wochen identisch sind. Keine Feiertage, keine Wochenpläne, die jemand benutzen könnte.

Edit:
Mit Julien Frage, über Stunden einer Nacht Unternehmen arbeitet, hat es zu meiner Aufmerksamkeit gekommen, dass die bisherige Lösung nicht die beste bu ist. Sie können nicht um 20:00 eine Leiste geöffnet haben, um 06:00 schließen, und vergleichen, wenn die aktuelle Zeit (02:45) innerhalb dieses Intervalls ist, weil es nicht sein wird. Deshalb ist es am bequemsten, nicht die Schließzeit, sondern die Gesamtarbeitszeit in der passenden Maßeinheit (zB Minuten) zu erfassen.

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

Dies ermöglicht es Ihnen, einen dritten Zeitplan für einen bestimmten Tag hinzuzufügen, wenn dies einen Verstoß gegen Ihre Regeln darstellt, müssen Sie das Hinzufügen neuer Zeitpläne genau kontrollieren, um dies zu überprüfen ... oder Sie können einen "" hinzufügen sched_num "-Spalte mit einer Prüfbedingung, dass es entweder eine 0 oder 1 und eine eindeutige Einschränkung für day_of_week und sched_num ist. –

+1

das ist der bessere Weg, um Öffnungszeiten für Nacht-Business zu behandeln, wie eine Bar, geöffnet von 22.00 Uhr bis 04.00 Uhr. Zwei Einträge hinzufügen (Tag1: 22: 00-> 23:59 und Tag 2: 00: 00-> 04:00)? oder ein Eintrag (Tag1: 22: 00-> 04:00)? – Julien

+1

Interessante Frage. In diesem Fall wäre es am sinnvollsten, diese Situation wieder herzustellen. Siehe bearbeitete Antwort. – AlexanderMP

5

Welche Art von Datenbank verwenden Sie? Wenn es mysql ist, geben Sie ein Feld vom Typ "time" ein. Dann kannst du es mal passieren und grundlegende SQL-Manipulationen an ihnen vornehmen. Dieser ganze Beitrag geht von mysql aus.

Wenn es nur einen Speicher gibt und Sie wissen, dass er niemals wachsen wird, erstellen Sie einfach eine Tabelle mit Zeiten, in denen Sie die Öffnungszeiten des Geschäfts beibehalten. Wenn Sie überprüfen möchten, ob der Speicher geöffnet ist, überprüfen Sie die aktuelle Zeit für einen der Bereiche in der Datenbank.

Wenn es mehr als einen Speicher gibt, erstellen Sie eine Tabelle mit dem Namen "Times" und eine Tabelle mit dem Namen "Stores". In der Zeittabelle können Spalten mit einer ID namens "store_id" "offen" und "geschlossen" sein. Die Stores-Tabelle benötigt ebenfalls eine ID. Dann können Sie einfach sagen:

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

Dies gibt Ihnen die ganze Zeit Bereiche mit dem jeweiligen Speicher zugeordnet ist.