sql >> Databáze >  >> RDS >> Mysql

Efektivní řízení změn dat

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 nebo DELETE 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.



  1. mysql/oracle uložený matematický vzorec

  2. Oracle:Vyhněte se hodnotě NULL v to_date

  3. SQL - jak počítat unikátní kombinaci sloupců

  4. exportovat výsledek dotazu jako CSV prostřednictvím PHP