Ho avuto un problema simile:file flat di grandi dimensioni importati nel database una volta al giorno. La maggior parte dei dati non cambia.
Aggiungi due colonne extra alla tabella, data_iniziale e data_finale. Il valore predefinito per ending_date dovrebbe essere in futuro.
Per confrontare un file con il successivo, ordinali entrambi in base alle colonne chiave, quindi leggi una riga da ciascun file.
- Se le chiavi sono uguali:confronta il resto delle colonne per vedere se i dati sono cambiati. Se i dati della riga sono uguali, la riga è già nel database e non c'è niente da fare; se è diverso, aggiorna la riga esistente nel database con una data_finale di oggi e inserisci una nuova riga con una data_iniziale di oggi. Leggi una nuova riga da entrambi i file.
- Se la chiave del vecchio file è più piccola:la riga è stata eliminata. Aggiorna data_finale ad oggi. Leggi una nuova riga dal vecchio file.
- Se la chiave del nuovo file è più piccola:è stata inserita una riga. Inserisci la riga nel database con una data_iniziale di oggi. Leggi una nuova riga dal nuovo file.
Ripeti finché non hai letto tutto da entrambi i file.
Ora per interrogare le righe che erano valide in qualsiasi data, seleziona con una clausola where test_date tra start_date e end_date.