Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Entwerfen nicht überlappender Datum-Uhrzeit-Ereignisse

Bei der Arbeit mit Datums-/Uhrzeitbereichen kommt es sehr häufig vor, dass Sie einen Bereich verwenden, der am Anfang inklusive und am Ende exklusiv ist. Zum Beispiel:

(using ISO8601 formatting)

Start                  End
2013-04-29T01:00:00Z - 2013-04-29T02:00:00Z
2013-04-29T02:00:00Z - 2013-04-29T03:00:00Z

Ein Wert liegt im Bereich, wenn er kleiner oder gleich dem Anfang und größer (aber nicht gleich) dem Ende ist. Im obigen Beispiel 02:00 gehört zum zweiten Bereich, nicht zum ersten. Mit anderen Worten:

Start <= value < End 

Oder äquivalent,

Start <= value  AND  End > value

Verwenden Sie in Mathematik die Intervallnotation , wird dies als "halboffenes" Intervall bezeichnet.

[Start, End)

Dies ist immer ein besserer Ansatz als die Idee, einen Wert wie 01:59:59 zu verwenden . Überlegen Sie, ob ich End - Start subtrahieren würde um eine Dauer zu bekommen. Ich würde erwarten, dass die Antwort eine Stunde ist, nicht 59 Minuten und 59 Sekunden.

Die meisten Beispiele verwenden die Begriffe Start/End , aber manchmal sehen Sie Begin/End oder Start/Stop . Ich persönlich denke, dass die beste Gruppe von Begriffen, die Sie verwenden sollten, wenn Sie einen inklusiven/exklusiven Bereich haben, Start/Until ist . Es hat den zusätzlichen Vorteil, dass beide Begriffe aus 5 Zeichen bestehen, alphabetisch aufgereiht sind und ausdrücklich angeben, dass das Enddatum exklusiv ist.

Wenn Sie über unterschiedliche Ereignisse sprechen, sollten Sie Ihre Zeiten auch als UTC aufzeichnen, um Verwechslungen mit Zeitzonen zu vermeiden. Dies ist sogar für lokale Anwendungen wichtig, da viele Zeitzonen Sommerzeitumstellungen durchlaufen. Sie möchten nicht, dass die Werte, die Sie in der Datenbank aufzeichnen, mehrdeutig sind. In MySQL können Sie den TIMESTAMP verwenden Datentyp, um sicherzustellen, dass Werte als UTC gespeichert werden, oder Sie können den DATETIME verwenden Datentyp, wenn Sie sicher sein können, dass Sie in Ihrem Anwendungscode mit UTC-Werten arbeiten.