Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Efektywne zarządzanie zmianami danych

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śli UPDATE lub DELETE 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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. BŁĄD wstawić do funkcji AKTUALIZACJI WŁ. duplikatu

  2. Aktualizowanie klucza podstawowego MySQL

  3. Przedstawiamy ClusterControl 1.4.1 — wydanie ProxySQL

  4. wyświetlanie dokładnych wyników

  5. php - laravel :Jak poradzić sobie z nakładaniem się czasu w bazie danych?