Wygląda na to, że próbujesz zaimplementować Baza danych tymczasowych . Obsługa czasowa była jednym z głównych dodatków do standardu ANSI/ISO SQL:2011. MySQL (jak większość RDBMS) pozostaje w tyle za standardem. Pomyśl o tymczasowej bazie danych jako o odpowiedniku CVS/SVN/Git w DBMS.
Natomiast tradycyjna baza danych, której używamy bez funkcji tymczasowych, może być nazwana bieżącą bazą danych .
W bieżącej bazie danych , jeśli spróbujesz zaimplementować wsparcie tymczasowe, możesz zawieść na wiele sposobów, stosując różne podejścia:
-
Podejście jednostołowe. Kiedy musisz dokonać modyfikacji, robisz
UPDATEs
na oryginalnych rekordach i jeśli nie masz jakiejś własnej logiki wyzwalania/audytu, ślad historii jest nieobecny. Nawet jeśli masz dziennik audytu/zmian, będziesz musiał zrobić trochę brzydkiego kopania, aby zrekonstruować historię zmian. -
Podejście dwustolikowe. Zamiast wprowadzać modyfikacje na miejscu, dzielisz dane na dwie tabele, jedną z rekordami podstawowymi/pierwotnymi (np. rezerwacja) i drugą tabelę ze zmianami/modyfikacjami/deltami. Wtedy przynajmniej zachowasz oryginalne dane, ale znowu musisz napisać złożoną logikę, aby wyświetlić oryginalne dane z nałożonymi modyfikacjami. Jeszcze gorzej, jeśli chcesz tylko trochę zastosowanych modyfikacji.
-
Podejście do wstępnie obliczonej tabeli wynikowej . Przechowujesz 3 lub więcej tabel:rekordy bazowe, modyfikacje, a także tabelę, która stara się zawsze mieć wynikowy (utrzymuje aktualność bazy + modyfikacje). Powodzenia w pisaniu wyzwalaczy i procedur do wykonywania tych obliczeń za każdym razem, gdy wykonujesz
INSERTs
, a Niebo pomoże ci, jeśliUPDATE
lubDELETE
jest potrzebne. Konfiguracja jest delikatna i może wypaść z synchronizacji, na przykład zakleszczenia i wycofanie. Jeśli nie zrobisz tego w bazie danych z wyzwalaczami/procedurami, możesz spróbować zaimplementować wynikowe obliczenia w kodzie aplikacji, ale miej w tym szczęście - i może to być brzydkie dla konsumentów wielowątkowych. Mimo to nie masz łatwego dostępu do wyników, mając tylko niektóre zastosowane modyfikacje.
Wniosek: Jeśli nie jesteś ograniczony do MySQL, powinieneś naprawdę rozważyć użycie bazy danych, która ma wbudowaną obsługę czasową. W przeciwnym razie ponownie zaimplementujesz koło.