Ich denke, dass die richtige Antwort auf diese Frage ganz davon abhängt, was Sie mit den Daten vorhaben. Wenn Sie vorhaben, Ihre gesamte Arbeit in PHP zu erledigen und nichts in der Datenbank, ist es am besten, die Daten in einem Format zu speichern, das Ihnen bei Ihrer Arbeit in PHP am meisten hilft. Das könnte in der Tat die Speicherung als Strings sein. Das mag für einen DBA grauenhaft klingen, aber Sie dürfen nicht vergessen, dass die Datenbank dazu da ist, Ihrer Anwendung zu dienen. Wenn Sie andererseits viele Vergleiche in der Datenbank mit ausgefallenen Abfragen durchführen, sollten Sie darauf achten, alles in der Datenbank in einem Format zu speichern, das Ihre Abfragen möglichst effizient macht.
Bei Aufgaben wie der Berechnung von Arbeitsstunden bei schweren Lasten kann die Konvertierung in ein Dezimalformat die Berechnungen erleichtern, bevor eine endgültige Konvertierung zurück in Stunden:Minuten erfolgt. Eine einfache Funktion kann geschrieben werden, um eine Dezimalzahl hin und her zu konvertieren, wenn Sie Daten aus der Datenbank abrufen, sie in ein Dezimalformat konvertieren, alle Berechnungen durchführen und sie dann wieder zurück in ein Zeitformat konvertieren lassen.
Die Verwendung von Unix-Zeitstempeln ist praktisch, wenn Sie Daten berechnen, wahrscheinlich aber nicht so sehr, wenn Sie Zeiten berechnen wollen. Während es scheinen, um einige positive mit diesem, wie sehr leicht Hinzufügen eines Zeitstempels zu einem Zeitstempel, ich habe festgestellt, dass mit alles in Zeitstempel zu Berechnungen zu konvertieren ist lästig und ärgerlich, so würde ich weg von diesem Szenario zu steuern.
Zusammenfassend lässt sich also feststellen:
- Wenn Sie Daten einfach speichern, aber nicht manipulieren wollen, können Sie Strings eine effektive Methode sein. Sie sind leicht zu lesen und zu überprüfen. Für alles anderes, wählen Sie etwas anderes.
- Das Rechnen mit Zahlen macht das Rechnen sehr einfach. Konvertieren Sie die Uhrzeit/das Datum in eine Dezimalzahl um, führen Sie alle wichtigen Berechnungen durch und kehren Sie dann zu Echtzeitformat zurück und speichern.
- Sowohl PHP's Datetime als auch Oracle's Date sind praktisch, und es gibt einige fantastische Funktionen in Oracle und PHP eingebaut, um die Daten zu manipulieren, aber selbst die besten Funktionen können schwieriger sein als das Hinzufügen ein paar Dezimalstellen zu addieren. Ich denke, dass die Speicherung der Daten in der Datenbank in einem Datumsformat zu speichern, ist wahrscheinlich eine sichere Idee - besonders wenn Sie Berechnungen auf der Grundlage der Spalten innerhalb einer Abfrage durchführen wollen. Was Sie innerhalb von PHP mit den Daten machen wollen, wird bestimmen, wie Sie sie verwenden.
- Option vier würde ich von vornherein ausschließen.
Edit: Ich hatte gerade ein interessantes Gespräch mit einem Freund über Zeittypen. Eine weitere Sache, der man sich bewusst sein sollte, ist, dass zeitbasierte Objekte manchmal mehr Probleme verursachen können als sie lösen. Er befasste sich mit einer Anwendung, in der wir Lieferdaten und -zeiten verfolgen. Die Daten wurden zwar in Datetime-Objekten gespeichert, aber der Haken an der Sache ist, dass die Lieferzeiten für LKWs auf einen bestimmten Tag und ein Lieferfenster festgelegt sind. Eine akzeptable Lieferung ist entweder pünktlich oder bis zu einer Stunde nach der Zeit. Dies führte zu einem gewissen Chaos, als ein Lkw um 23:30 Uhr eintreffen sollte und 45 Minuten später ankam. Obwohl er noch innerhalb des zulässigen Zeitfensters lag, wurde er als am nächsten Tag zugestellt angezeigt. Ein weiteres Problem trat in einem Verteilungszentrum auf, dessen 24-Stunden-Tag um 4:00 Uhr morgens beginnt. Die Einrichtung von Zeiten, die für die Mitarbeiter funktionierten, und die Konsolidierung auf Zahlungen, die sich um ein normales Datum drehten, bereitete ziemliche Kopfschmerzen.