Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment modéliser des données qui évoluent lentement dans le temps ?

J'ai eu un problème similaire - de gros fichiers plats importés dans la base de données une fois par jour. La plupart des données sont immuables.

Ajoutez deux colonnes supplémentaires à la table, starting_date et ending_date. La valeur par défaut pour ending_date devrait être dans le futur.

Pour comparer un fichier à l'autre, triez-les tous les deux par les colonnes clés, puis lisez une ligne de chaque fichier.

  • Si les clés sont égales :comparez le reste des colonnes pour voir si les données ont changé. Si les données de la ligne sont égales, la ligne est déjà dans la base de données et il n'y a rien à faire ; si elle est différente, mettez à jour la ligne existante dans la base de données avec une date de fin d'aujourd'hui et insérez une nouvelle ligne avec une date de début d'aujourd'hui. Lire une nouvelle ligne dans les deux fichiers.
  • Si la clé de l'ancien fichier est plus petite :la ligne a été supprimée. Mettre à jour ending_date à aujourd'hui. Lire une nouvelle ligne de l'ancien fichier.
  • Si la clé du nouveau fichier est plus petite :une ligne a été insérée. Insérez la ligne dans la base de données avec une date de départ d'aujourd'hui. Lire une nouvelle ligne à partir du nouveau fichier.

Répétez jusqu'à ce que vous ayez tout lu dans les deux fichiers.

Maintenant, pour rechercher les lignes qui étaient valides à n'importe quelle date, sélectionnez simplement avec une clause where test_date entre start_date et end_date.