Beste Weg zum speichern von Datum/Uhrzeit-Daten in SQL Server 2008 R2 und SQL Server Compact 4

Entwickeln wir eine Anwendung in C# 4, verwendet SQL Server 2008 R2 als backend. SQL Server Compact 4 ist auch zum trennen von clients in sehr wenigen Szenarien. Wir werden Fragen, was ist der beste Weg zum speichern von Datum/Uhrzeit der Daten in diese Datenbanken, so dass:

  1. Daten mit verschiedenen Zeit-offsets (kommen aus unterschiedlichen Zeitzonen) können co-existieren schön. Dies bedeutet, sortiert und verglichen werden.
  2. Daten in SQL Server 2008 R2 und SQL Server Compact 4 übertragen werden kann, hin und her nahtlos; dies ist eine sekundäre Anforderung, sollte keine Kompromisse eingehen, die gewählte Gestaltung.

Unser Hauptanliegen ist die Erhaltung der lokalen Uhrzeit für jedes Ereignis aufgezeichnet, aber ohne die Möglichkeit zu vergleichen und Sortieren der Ereignisse generiert wurden, aus unterschiedlichen Zeitzonen und haben daher unterschiedliche Zeit-offsets.

Haben wir überlegt, die datetimeoffset Daten geben, da es speichert die Zeit-offset und weil es Karten schön .NET DateTimeOffset. Es ist jedoch nicht unterstützt SQL Server Compact 4. Wäre eine alternative zum entfernen von offset-Informationen aus der Datenbank, und verwenden Sie eine einfache datetime Daten geben, so dass jedes Stück von Daten in die Datenbank normalisiert ist, und die Probleme mit der Kompakten weniger. Jedoch, dies führt zu dem problem, dass sich offset-info müssten rekonstruiert werden irgendwie auf Abruf, bevor der Benutzer die Daten sieht.

Meine Frage ist also, gibt es irgendwelche best practices oder Richtlinien, wie zum speichern von Datum/Zeit-Werte in SQL Server, unter Berücksichtigung, dass wir brauchen, um den Umgang mit unterschiedlichen Zeitzonen, und die Interoperabilität zwischen 2008 R2 und Kompakt-4 so einfach wie möglich?

Danke.

Beachten Sie, dass datetimeoffset nicht wirklich speichern einer Zeitzone - es nur speichert einen offset. Wissen Sie noch nicht, in welcher Zeitzone es wurde beobachtet, d.h., was die lokale Zeit war 10 Minuten später, wenn die offset kann geändert haben. Was sind diese Werte repräsentieren sollen? Nur Augenblicke in der Zeit? Grundsätzlich benötigen Sie, um die original-offset oder sind Sie nur daran interessiert in dem Augenblick, an dem etwas geschehen ist?
Du hast Recht, ich muss zugeben, dass ich noch nicht sah es auf diese Weise. Wir sind daran interessiert zu wissen, die lokale Zeit des Ereignisses, sondern auch müssen in der Lage sein zu vergleichen die Zeit von jedem Ereignis andere Ereignisse, die möglicherweise generiert wurden, an verschiedenen Orten und daher unter unterschiedlichen Zeitzonen (und damit verschiedene offsets).
Okay - wenn Sie müssen die lokale Zeit, dann müssen Sie zum speichern der offset der einen oder anderen Weise. Als Nächstes müssen Sie darüber nachdenken, ob Sie brauchen, um in der Lage sein zu Abfrage diese Daten nach der lokalen Zeit - zum Beispiel, könnten Sie speichern einen DateTime-Wert in UTC und den Offsets in einer separaten Spalte... dass würde es einfach machen, um weltweit, aber relativ schwer für die Suche lokal...
Wir würden eher eine Optimierung für die lokale Zeit, als für den globalen Vergleich/Sortieren. Vielleicht speichern DateTime in local Zeit-und offset-als separate Spalte? Oder, alternativ, DateTimeOffset? Richtlinien/best practices auf, wie gut der SQL Server ist DateTimeOffset arbeitet und integriert mit .NET?
Die Verwendung von SqlServerCE ist, warum ich vorschlug, nicht mit DateTimeOffset. Aber ja, Sie könnte verwenden Sie eine DateTime-local und ein offset für subtrahieren, um die UTC.

InformationsquelleAutor CesarGon | 2013-06-27

Schreibe einen Kommentar