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

Przechowywanie zmian na encjach:Czy MySQL jest właściwym rozwiązaniem?

Gdybym miał do czynienia z problemem, o którym wspomniałeś, zaprojektowałbym tabelę LOG w następujący sposób:

  1. EntityName :(Ciąg) Podmiot, którym manipulujemy. (obowiązkowe)
  2. ObjectId :Jednostka, którą manipulujesz, klucz podstawowy.
  3. FieldName :(String) Nazwa pola Entity.
  4. OldValue :(String) Stara wartość pola Entity.
  5. NewValue :(String) Nowa wartość pola Entity.
  6. UserCode :Unikalny identyfikator użytkownika aplikacji. (obowiązkowe)
  7. TransactionCode :Każda operacja zmieniająca encje będzie musiała mieć unikalny kod transakcji (np. GUID) (obowiązkowy),
    W przypadku aktualizacji encji zmieniającej wiele pól, ta kolumna będzie kluczowym punktem do śledzenia wszystkich zmian w aktualizacja (transakcja)
  8. ChangeDate :Data dokonania transakcji. (obowiązkowe)
  9. FieldType :wyliczenie lub tekst przedstawiający typ pola, taki jak TEKST lub Podwójny. (obowiązkowe)

Przy takim podejściu
Dowolna jednostka (tabela) może być śledzona
Raporty będą czytelne
Tylko zmiany będą rejestrowane.
Kod transakcji będzie kluczowym punktem do wykrycia zmian przez pojedynczą akcja.

BTW

Store the changes in the entitychange table and then store the value 
according to its datatype in entitychange_[bool|timestamp|double|string]

Nie będą potrzebne, w jednej tabeli będziesz mieć zmiany i typy danych

Use partitioning by HASH(entity_id)

Wolę partycjonowanie według ChangeDate lub tworzenie kopii zapasowych tabel dla changeDate, które są na tyle stare, że można je zarchiwizować i usunąć z głównej tabeli LOG

Should I use another database system, maybe MongoDB?

Każda baza danych ma swoje własne problemy i wady, możesz użyć projektu na dowolnym RDBMS. Przydatne porównanie baz danych opartych na dokumentach, takich jak MongoDB można znaleźć tutaj

mam nadzieję, że będzie pomocna.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak odświeżyć listę rozwijaną bez odświeżania strony?

  2. Znajdź liczbę kolumn w tabeli

  3. mysql.h brakuje .... (Ruby on Rails, OSX)

  4. Python:Jak uzyskać czas z obiektu datetime.timedelta?

  5. Czy usunięcie wiersza z widoku powoduje usunięcie wiersza z tabeli bazowej - MySQL?