Zdá se, že se pokoušíte implementovat Dočasnou databázi . Dočasná podpora byla jedním z hlavních přírůstků standardu ANSI/ISO SQL:2011. MySQL (jako většina RDBMS) zaostává za standardem. Představte si Temporal Database jako DBMS ekvivalent CVS/SVN/Git.
Naproti tomu tradiční databázi, kterou používáme bez dočasných funkcí, lze nazvat Aktuální databáze .
V Aktuální databázi , pokud se pokusíte implementovat dočasnou podporu, můžete selhat mnoha způsoby s různými přístupy:
-
Přístup založený na jedné tabulce. Když potřebujete provést úpravy, proveďte
UPDATEs
na vašich původních záznamech, a pokud nemáte nějakou domácí logiku spouštění/audit, stopa historie chybí. I když máte protokol auditu/změn, museli byste udělat nějaké ošklivé kopání, abyste zrekonstruovali historii změn. -
Přístup dvou stolů. Namísto provádění úprav na místě rozdělíte svá data do dvou tabulek, jedné se základními/původními záznamy (např. rezervace) a další tabulky pro vaše změny/úpravy/rozdíly. Pak máte alespoň zachována původní data, ale znovu musíte napsat složitou logiku, abyste mohli zobrazit původní data s navrstvenými úpravami. Je to ještě horší, pokud chcete jen nějaké z použitých úprav.
-
Přístup předpočítané výsledné tabulky . Udržujete 3 nebo více tabulek:základní záznamy, modifikace a také tabulku, která se snaží mít vždy výslednici (udržuje aktuální základ + modifikace). Hodně štěstí při psaní spouštěčů a procedur pro provádění tohoto výpočtu vždy, když děláte
INSERTs
, a Heaven vám pomohou v případěUPDATEs
neboDELETE
je potřeba. Nastavení je křehké a mohlo by dojít k jeho nesynchronizaci, jako je uváznutí a vrácení zpět. Pokud to neuděláte v rámci DB pomocí spouštěčů/procedur, můžete se pokusit implementovat výsledný výpočet do kódu aplikace, ale mějte v tom hodně štěstí - a u spotřebitelů s více vlákny by to mohlo být ošklivé. A přesto nemáte snadný přístup k výsledkům pouze s některými provedené úpravy.
Závěr: Pokud nejste omezeni na MySQL, měli byste skutečně zvážit použití databáze, která má vestavěnou dočasnou podporu. V opačném případě se chystáte znovu implementovat kolo.