sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan modellerer jeg data, der langsomt ændrer sig over tid?

Jeg havde et lignende problem - store flade filer importeret til databasen én gang om dagen. De fleste af dataene er uændrede.

Tilføj to ekstra kolonner til tabellen, startdato og slutdato. Standardværdien for ending_date bør være engang i fremtiden.

For at sammenligne en fil med den næste skal du sortere dem begge efter nøglekolonnerne og derefter læse en række fra hver fil.

  • Hvis nøglerne er ens:Sammenlign resten af ​​kolonnerne for at se, om dataene er ændret. Hvis rækkedata er ens, er rækken allerede i databasen, og der er ikke noget at gøre; hvis det er anderledes, skal du opdatere den eksisterende række i databasen med en slutdato for i dag og indsætte en ny række med en startdato for i dag. Læs en ny række fra begge filer.
  • Hvis nøglen fra den gamle fil er mindre:rækken blev slettet. Opdater ending_date til i dag. Læs en ny række fra den gamle fil.
  • Hvis nøglen fra den nye fil er mindre:en række blev indsat. Indsæt rækken i databasen med startdatoen i dag. Læs en ny række fra den nye fil.

Gentag, indtil du har læst alt fra begge filer.

For nu at forespørge efter de rækker, der var gyldige på en hvilken som helst dato, skal du blot vælge med en where-klausul test_date mellem start_date og end_date.



  1. Sådan opretter du forbindelse til en MySQL- eller MariaDB-database

  2. dynamisk videregive tabelnavn i oracle for loop

  3. app kan ikke linke til mysql-biblioteker (CentOS)

  4. Indstil maksimal udførelsestid i MYSQL / PHP