sql >> Database >  >> RDS >> Sqlserver

Hoe modelleer ik gegevens die in de loop van de tijd langzaam veranderen?

Ik had een soortgelijk probleem - grote platte bestanden die eenmaal per dag in de database werden geïmporteerd. De meeste gegevens veranderen niet.

Voeg twee extra kolommen toe aan de tabel, startdatum en einddatum. De standaardwaarde voor end_date zou ergens in de toekomst moeten liggen.

Om het ene bestand met het andere te vergelijken, sorteert u ze beide op de sleutelkolommen en leest u vervolgens één rij uit elk bestand.

  • Als de sleutels gelijk zijn:vergelijk de rest van de kolommen om te zien of de gegevens zijn gewijzigd. Als de rijgegevens gelijk zijn, staat de rij al in de database en is er niets aan de hand; als het anders is, update dan de bestaande rij in de database met een einddatum van vandaag en voeg een nieuwe rij in met een begindatum van vandaag. Lees een nieuwe rij uit beide bestanden.
  • Als de sleutel uit het oude bestand kleiner is:de rij is verwijderd. Update einddatum naar vandaag. Lees een nieuwe rij uit het oude bestand.
  • Als de sleutel uit het nieuwe bestand kleiner is:er is een rij ingevoegd. Voeg de rij in de database in met een begindatum van vandaag. Lees een nieuwe rij uit het nieuwe bestand.

Herhaal dit totdat je alles uit beide bestanden hebt gelezen.

Als u nu wilt zoeken naar de rijen die op een willekeurige datum geldig waren, selecteert u gewoon met een waar-clausule test_date tussen start_date en end_date.



  1. SQL-insert met geselecteerde en hardgecodeerde waarden

  2. Postgres analoog naar CROSS APPLY in SQL Server

  3. Creëer een een-op-veel-relatie met SQL Server

  4. UTF-8-gecodeerde dump in MySQL laden