8 Stimmen

Entwurf Betriebszeiten SQL-Tabelle

Ich entwerfe eine SQL-Tabelle zum Speichern der Öffnungszeiten von Geschäften.

Einige Geschäfte haben sehr einfache Öffnungszeiten: Montag bis Sonntag von 9:30 Uhr bis 10:00 Uhr

Andere sind etwas komplizierter. Betrachten Sie bitte das folgende Szenario:

Monday:  Open All Day
Tuesday: 7:30AM – 2:30PM & 4:15PM – 11:00 PM 
Wednesday: 7:00PM – 12:30 AM (technically closing on Thursday morning)
Thursday: 9:00AM – 6:00PM
Friday: closed.

Wie würden Sie die Tabelle(n) gestalten?

EDIT

Die Stunden werden verwendet, um anzuzeigen, ob ein Geschäft zu einer vom Benutzer ausgewählten Zeit geöffnet ist.

Ausnahmen, wie z. B. Feiertage, können wahrscheinlich in einer anderen Tabelle behandelt werden.

Die Öffnungszeiten des Ladens ändern sich nicht von Woche zu Woche.

9voto

Chains Punkte 12031

Eine solche Tabelle wäre sowohl für die von Ihnen angegebene Ausgabe als auch für das Abfeuern eines Teils der Daten (offen? ja/nein) einfach:

Store | Day | Open | Closed
---------------------------
1     | 1   | 0000 | 2400
1     | 2   | 0730 | 1430
1     | 2   | 1615 | 2300
...

Merkmale:

  1. Die Verwendung der 24-Stunden-Rechnung ist nicht notwendig, erleichtert aber das Rechnen.
  2. Die Laden-ID würde vermutlich mit einer Nachschlagetabelle verknüpft, in der Sie die Ladeninformationen gespeichert haben.
  3. Die Tages-ID entspricht dem Wochentag (1 = Sonntag, 2 = Montag, usw.)

Um Ihren Datensatz abzufragen, brauchen Sie nur: SELECT Day, Open, Close... (Sie möchten natürlich Öffnen/Schließen formatieren)

Um IsOpen? abzufragen, genügt es:

SELECT CASE WHEN @desiredtime BETWEEN Open AND Closed THEN 1 ELSE 0 END 
FROM table 
WHERE store = @Store

3voto

FLOOD racer Punkte 195

Betrachten Sie es eher als die Definition von Zeitrahmen, Tage/Wochen sind komplexer, weil sie Regeln und definierte Start- und Endpunkte haben.

Wie würden Sie einen Zeitrahmen definieren?

eine Einschränkung (Start[Uhrzeit und Tag]) , eine Referenz Dauer" (Stunden, Minuten, der Spanne) *. Jetzt können sich die Schichten (Zeitrahmen) über mehrere Tage erstrecken, und Sie müssen keine komplexe Logik anwenden, um die Daten zu extrahieren und in Berechnungen zu verwenden.

**Store_Hours**

Store | Day | Open | DURATION
---------------------------
1     | 1   | 0000 | 24
1     | 2   | 0730 | 7
1     | 2   | 1615 | 6.75
... 
1     | 3   | 1900 | 5.5

2voto

Cade Roux Punkte 85601

Müssen Sie mehr tun, als sie nur zu lagern und auszustellen?

Ich denke, dass ein Entwurf, der erkennen muss, ob ein Geschäft zu einer bestimmten Zeit geöffnet ist, alle Möglichkeiten berücksichtigen muss, da man sonst am Ende nicht in der Lage ist, etwas zu berücksichtigen.

Wie sieht es mit Ausnahmen im Urlaub aus?

Ich würde in Erwägung ziehen, sie als Intervalle zu speichern, die auf einer Basiszeit basieren (Minuten seit der Zeit 0 in einer Woche).

0 ist also Mitternacht am Montag.

Intervall 1 wäre 0 - 1440

Intervall 2 wäre 1890 - 2310

usw.

Sie könnten eine vom Benutzer gewählte Zeit einfach in eine Minutenverschiebung umwandeln und feststellen, ob ein Geschäft geöffnet ist.

Ihr einziges verbleibendes Problem wäre die Interpretation in der Anzeige für die freundliche Anzeige (wahrscheinlich eine umfangreiche Logik, aber nicht unmöglich) und die Überschneidung zum Zeitpunkt 10080 -> 0.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X