Nous commençons à concevoir les blocs de construction d'un magasin de données / entrepôt et nous devons être en mesure de prendre en charge tous les fuseaux horaires (nos clients viennent du monde entier). De la lecture des discussions en ligne (et dans les livres), une solution courante semble être d'avoir une dimension de date et d'heure distincte ainsi qu'un horodatage dans les tables de faits.
Cependant, la question à laquelle j'ai du mal à répondre est de savoir à quoi me servent réellement les dimensions de date et d'heure compte tenu de mes exigences de fuseau horaire dynamique. Une dimension de temps a un peu plus de sens mais j'ai du mal avec la dimension de date. Une approche de conception générale pour une dimension de date comprend généralement des propriétés telles que le nom du jour, le jour de la semaine, le nom du mois, etc. Le problème que j'ai avec tout cela est que 23h00 le mardi 31 décembre 2013 à UTC est mercredi , 1er janvier 2014 dans tous les fuseaux horaires postérieurs à UTC + 2.
Donc, si je dois faire toutes ces conversions de fuseau horaire sur chaque requête (et rapport), quel est l'intérêt d'avoir et de stocker ces propriétés que je n'utiliserai probablement jamais (semble-t-il)? Certaines personnes suggèrent d'avoir des lignes de faits pour chaque fuseau horaire, mais cela me semble ridicule. Nous devons être en mesure de stocker des millions d'enregistrements chaque mois.
D'autres suggèrent d'avoir une table de pont de fuseau horaire qui, bien que logique, semble également être une complexité supplémentaire et des jointures supplémentaires pour accomplir quelque chose que mes applications et rapports clients devraient facilement être en mesure de comprendre à partir d'une date (les rapports seront principalement basés sur le Web où il existe une myriade de bibliothèques pour aider à la conversion, l'affichage et le formatage des dates).
La seule chose à laquelle je peux penser est la facilité et éventuellement les performances du regroupement par date et heure, mais à quel point une pratique est mauvaise de regrouper par partie de date (nous utilisons MS SQL mais nous interrogerons des millions de lignes) ou devrions-nous envisager juste des dimensions de date et d'heure extrêmement simples avec pas beaucoup plus que les nombres d'heure, de jour, de mois et d'année, car la plupart des littéraux tels que lundi ne signifieraient pas grand-chose lorsque les fuseaux horaires entrent en jeu?