sql >> Databasteknik >  >> RDS >> Sqlserver

Hur modellerar jag data som långsamt förändras över tiden?

Jag hade ett liknande problem - stora platta filer importerade till databasen en gång om dagen. De flesta data är oförändrade.

Lägg till två extra kolumner i tabellen, startdatum och slutdatum. Standardvärdet för slutdatum bör vara någon gång i framtiden.

För att jämföra en fil med nästa, sortera dem båda efter nyckelkolumnerna och läs sedan en rad från varje fil.

  • Om nycklarna är lika:jämför resten av kolumnerna för att se om data har ändrats. Om raddata är lika finns raden redan i databasen och det finns inget att göra; om det är annorlunda, uppdatera den befintliga raden i databasen med dagens slutdatum och infoga en ny rad med dagens startdatum. Läs en ny rad från båda filerna.
  • Om nyckeln från den gamla filen är mindre:raden raderades. Uppdatera ending_date till idag. Läs en ny rad från den gamla filen.
  • Om nyckeln från den nya filen är mindre:en rad infogades. Infoga raden i databasen med dagens startdatum. Läs en ny rad från den nya filen.

Upprepa tills du har läst allt från båda filerna.

För att nu fråga efter de rader som var giltiga vid vilket datum som helst, välj bara med en where-sats test_date mellan start_date och end_date.



  1. ASP.NET Medlemskap/Rollleverantörer för MySQL?

  2. mysql-frågeresultat i php-variabel

  3. Lägga till nollvärdesposter i en fråga med kumulativa analytiska funktioner

  4. MySQL-drivrutin för Rails i Windows 7 x64