Měl jsem podobný problém - velké ploché soubory importované do databáze jednou denně. Většina dat se nemění.
Přidejte do tabulky dva další sloupce, počáteční_datum a koncové_datum. Výchozí hodnota pro ending_date by měla být někdy v budoucnu.
Chcete-li porovnat jeden soubor s druhým, seřaďte je oba podle klíčových sloupců a poté z každého souboru přečtěte jeden řádek.
- Pokud jsou klíče stejné:porovnejte zbývající sloupce a zjistěte, zda se data změnila. Pokud jsou data řádku stejná, řádek je již v databázi a nelze nic dělat; pokud se liší, aktualizujte stávající řádek v databázi s dnešním datem ukončení a vložte nový řádek s dnešním datem zahájení. Přečtěte si nový řádek z obou souborů.
- Pokud je klíč ze starého souboru menší:řádek byl smazán. Aktualizujte datum ukončení na dnešek. Přečtěte si nový řádek ze starého souboru.
- Pokud je klíč z nového souboru menší:byl vložen řádek. Vložte řádek do databáze s počátečním_datem dneška. Přečtěte si nový řádek z nového souboru.
Opakujte, dokud nepřečtete vše z obou souborů.
Chcete-li se nyní dotázat na řádky, které byly platné k libovolnému datu, stačí vybrat pomocí klauzule where test_date mezi počátečním datem a datem ukončení.