Hvis jeg stod over for det problem, du nævnte, ville jeg designe LOG-tabellen som nedenfor:
EntityName
:(String) Enhed, der bliver manipuleret.(obligatorisk)ObjectId
:Enhed, der bliver manipuleret, primær nøgle.FieldName
:(String) Navn på enhedsfelt.OldValue
:(String) Entitetsfelt gammel værdi.NewValue
:(String) Entitetsfelt ny værdi.UserCode
:Applikationsbrugerens unikke identifikator. (obligatorisk)TransactionCode
:Enhver handling, der ændrer enhederne, skal have en unik transaktionskode (såsom GUID) (obligatorisk),
I tilfælde af en opdatering på en enhed, der ændrer flere felter, vil denne kolonne være nøglepunktet for at spore alle ændringer i opdateringen (transkation)ChangeDate
:Overførselsdato. (obligatorisk)FieldType
:opregning eller tekst, der viser felttypen som TEKST eller Dobbelt. (obligatorisk)
Med denne tilgang
Enhver enhed (tabel) kunne spores
Rapporter vil være læsbare
Kun ændringer vil blive logget.
Transaktionskode vil være nøglepunktet for at detektere ændringer af en enkelt handling.
BTW
Store the changes in the entitychange table and then store the value
according to its datatype in entitychange_[bool|timestamp|double|string]
Det er ikke nødvendigt, i den enkelte tabel vil du have ændringer og datatyper
Use partitioning by HASH(entity_id)
Jeg foretrækker at partitionere efter ChangeDate eller oprette backup-tabeller til changeDate, der er gamle nok til at blive sikkerhedskopieret og fjernet fra LOG-hovedtabellen
Should I use another database system, maybe MongoDB?
Enhver database kommer med sine egne problemer og ulemper, du kan bruge designet på enhver RDBMS. En nyttig sammenligning af dokumentbaserede databaser som MongoDB kan findes her
håber være nyttigt.