DATETIME start DATETIME end
Ich bitte Sie, stattdessen zwei DATETIME-Werte zu verwenden, die mit event_start und event_end gekennzeichnet sind .
Zeit ist ein komplexes Geschäft
Der größte Teil der Welt hat inzwischen das auf Verweigerung basierende metrische System für die meisten Messungen zu Recht oder zu Unrecht übernommen. Dies ist insgesamt gut, da wir uns zumindest alle einig sein können, dass ag, ein ml, ein Kubikzentimeter ist. Zumindest ungefähr so. Das metrische System weist viele Mängel auf, ist aber zumindest international durchweg fehlerhaft.
Mit der Zeit haben wir jedoch; 1000 Millisekunden in einer Sekunde, 60 Sekunden bis eine Minute, 60 Minuten bis eine Stunde, 12 Stunden für jeden halben Tag, ungefähr 30 Tage pro Monat, die je nach Monat und sogar Jahr variieren. Jedes Land hat seine Zeit von anderen versetzt Die Art und Weise, wie die Zeit in jedem Land formatiert wird, variiert.
Es ist viel zu verdauen, aber das lange und kurze ist für ein so komplexes Szenario unmöglich, eine einfache Lösung zu finden.
Einige Ecken können geschnitten werden, aber es gibt solche, bei denen es klüger ist, dies nicht zu tun
Obwohl die beste Antwort hier darauf hindeutet, dass Sie eine Ganzzahl von Minuten nach Mitternacht speichern, scheint dies durchaus vernünftig zu sein, habe ich gelernt, dies auf die harte Tour zu vermeiden.
Die Gründe für die Implementierung von zwei DATETIME-Werten liegen in einer Erhöhung der Genauigkeit, Auflösung und Rückmeldung.
Diese sind alle sehr praktisch, wenn das Design unerwünschte Ergebnisse liefert.
Speichere ich mehr Daten als erforderlich?
Es mag zunächst so aussehen, als würden mehr Informationen gespeichert, als ich benötige, aber es gibt einen guten Grund, diesen Treffer zu erzielen.
Das Speichern dieser zusätzlichen Informationen spart mir auf lange Sicht fast immer Zeit und Mühe, da ich unweigerlich feststelle, dass jemand, der erfährt, wie lange etwas gedauert hat, zusätzlich wissen möchte, wann und wo die Veranstaltung stattgefunden hat.
Es ist ein riesiger Planet
In der Vergangenheit habe ich mich schuldig gemacht, ignoriert zu haben, dass es neben meinen eigenen noch andere Länder auf diesem Planeten gibt. Es schien damals eine gute Idee zu sein, aber dies hat IMMER zu Problemen, Kopfschmerzen und späterer Zeitverschwendung geführt. Berücksichtigen Sie IMMER alle Zeitzonen.
C #
Eine DateTime lässt sich gut in eine Zeichenfolge in C # rendern. Die ToString-Methode (String Format) ist kompakt und einfach zu lesen.
Z.B
new TimeSpan(EventStart.Ticks - EventEnd.Ticks).ToString("h'h 'm'm 's's'")
SQL Server
Auch wenn Sie Ihre Datenbank separat von Ihrer Anwendungsoberfläche lesen, ist dateTimes auf einen Blick lesbar und die Durchführung von Berechnungen ist unkompliziert.
Z.B
SELECT DATEDIFF(MINUTE, event_start, event_end)
ISO8601 Datumsstandard
Wenn Sie SQLite verwenden, haben Sie dies nicht. Verwenden Sie stattdessen ein Textfeld und speichern Sie es im ISO8601-Format, z.
2013-01-27T12: 30: 00 + 0000
Anmerkungen:
Z.B
TimeOffset=(±Longitude.24)/360
... wobei ± sich auf die Ost- oder Westrichtung bezieht.
Es lohnt sich daher zu überlegen, ob es sich lohnt, Längen-, Breiten- und Höhenangaben zusammen mit den Daten zu speichern. Dies variiert in der Anwendung.
ISO8601 ist ein internationales Format.
Das Wiki ist sehr gut für weitere Details unter http://en.wikipedia.org/wiki/ISO_8601 .
Das Datum und die Uhrzeit werden in internationaler Zeit gespeichert und der Versatz wird abhängig davon aufgezeichnet, wo auf der Welt die Uhrzeit gespeichert wurde.
Nach meiner Erfahrung muss immer das vollständige Datum und die vollständige Uhrzeit gespeichert werden, unabhängig davon, ob ich denke, dass dies der Fall ist, wenn ich mit dem Projekt beginne. ISO8601 ist eine sehr gute und zukunftssichere Methode.
Zusätzliche Beratung kostenlos
Es lohnt sich auch, Ereignisse wie eine Kette zusammenzufassen. Wenn Sie beispielsweise ein Rennen aufzeichnen, kann das gesamte Ereignis nach Racer, Race_Circuit, Circuit_checkpoints und Circuit_Laps gruppiert werden.
Nach meiner Erfahrung ist es auch ratsam zu identifizieren, wer die Aufzeichnung gespeichert hat. Entweder als separate Tabelle, die über den Trigger ausgefüllt wird, oder als zusätzliche Spalte in der Originaltabelle.
Je mehr Sie eingeben, desto mehr steigen Sie aus
Ich verstehe den Wunsch, möglichst sparsam mit dem Platz umzugehen, vollkommen, aber ich würde dies selten auf Kosten des Informationsverlusts tun.
Als Faustregel für Datenbanken gilt, wie der Titel schon sagt, dass eine Datenbank nur so viel aussagen kann, wie sie Daten enthält, und dass es sehr kostspielig sein kann, historische Daten erneut zu durchsuchen und Lücken zu schließen.
Die Lösung besteht darin, es beim ersten Mal richtig zu machen. Dies ist sicherlich leichter gesagt als getan, aber Sie sollten jetzt einen tieferen Einblick in das effektive Datenbankdesign haben und anschließend eine viel bessere Chance haben, es beim ersten Mal richtig zu machen.
Je besser Ihr ursprüngliches Design ist, desto kostengünstiger sind die Reparaturen später.
Ich sage das alles nur, denn wenn ich in die Vergangenheit reisen könnte, würde ich es mir sagen, wenn ich dort ankomme.