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

Ukládání změn v entitách:Je MySQL tím správným řešením?

Pokud bych čelil problému, který jste zmínil, navrhl bych tabulku LOG ​​jako níže:

  1. EntityName :(String) Entita, se kterou se manipuluje. (povinné)
  2. ObjectId :Entita, se kterou se manipuluje, primární klíč.
  3. FieldName :(String) Název pole entity.
  4. OldValue :(String) Stará hodnota pole entity.
  5. NewValue :(String) Nová hodnota pole entity.
  6. UserCode :Jedinečný identifikátor uživatele aplikace. (povinné)
  7. TransactionCode :Každá operace měnící entity bude muset mít jedinečný kód transakce (jako GUID) (povinný),
    V případě aktualizace entity měnící více polí budou tyto sloupce klíčovým bodem pro sledování všech změn v aktualizace (transakce)
  8. ChangeDate :Datum transakce. (povinné)
  9. FieldType :výčet nebo text zobrazující typ pole jako TEXT nebo Double. (povinné)

S tímto přístupem
lze vysledovat jakoukoli entitu (tabulku)
Přehledy budou čitelné
Budou protokolovány pouze změny.
Kód transakce bude klíčovým bodem pro detekci změn jediným akce.

BTW

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

Nebude potřeba, v jediné tabulce budete mít změny a datové typy

Use partitioning by HASH(entity_id)

Preferuji rozdělení podle ChangeDate nebo vytvoření záložních tabulek pro changeDate, které jsou dostatečně staré na to, aby je bylo možné zálohovat a odstranit z hlavní tabulky LOG

Should I use another database system, maybe MongoDB?

Každá databáze má své vlastní problémy a nevýhody, design můžete použít na jakémkoli RDBMS. Užitečné srovnání databází založených na dokumentech, jako je MongoDB můžete najít zde

doufám, že vám pomůže.



  1. Postgres Copy from Variable with CSV data

  2. Jak vyřešit tuto chybu aktualizace dat v Laravel

  3. Jak zjistit, že uživatel je přítomen v databázi Sqlite pomocí Androidu?

  4. Bylo by vytvoření aplikace pomocí SQL Server Database File (mdf) hrozným nápadem?