Nous développons une application en C# 4 qui utilise SQL Server 2008 R2 comme backend. SQL Server Compact 4 est également utilisé pour les clients déconnectés dans quelques rares scénarios. Nous nous demandons quelle est la meilleure façon de stocker des données de date et d'heure dans ces bases de données afin que.. :
- Les données contenant des décalages horaires différents (provenant de fuseaux horaires différents) peuvent coexister sans problème. Cela signifie qu'elles peuvent être triées et comparées.
- Les données de SQL Server 2008 R2 et de SQL Server Compact 4 peuvent être transférées dans les deux sens de manière transparente ; il s'agit d'une exigence secondaire qui ne doit pas compromettre la conception choisie.
Notre principale préoccupation est de préserver l'heure locale pour chaque événement enregistré, mais sans perdre la possibilité de comparer et de trier les événements qui ont été générés à partir de fuseaux horaires différents et qui ont donc des décalages horaires différents.
Nous avons examiné le datetimeoffset
puisqu'il stocke le décalage horaire et qu'il s'adapte parfaitement à l'algorithme de .NET DateTimeOffset
. Cependant, elle n'est pas prise en charge dans SQL Server Compact 4. Une alternative serait de supprimer les informations de décalage de la base de données et d'utiliser une simple fonction datetime
de sorte que chaque donnée de la base de données est normalisée et que les problèmes liés à Compact sont moins nombreux. Cependant, cela introduit le problème que l'information de décalage devrait être reconstruite d'une manière ou d'une autre lors de la récupération avant que l'utilisateur ne voie les données.
Ma question est donc la suivante : existe-t-il des bonnes pratiques ou des directives sur la manière de stocker des valeurs de date/heure dans SQL Server, en tenant compte du fait que nous devrons gérer différents fuseaux horaires, et en rendant l'interopérabilité entre 2008 R2 et Compact 4 aussi facile que possible ?
Merci.