Om jag stod inför problemet du nämnde, skulle jag designa LOG-tabellen som nedan:
EntityName
:(Sträng) Entitet som manipuleras.(obligatoriskt)ObjectId
:Entitet som manipuleras, primärnyckel.FieldName
:(Sträng) Entitetsfältnamn.OldValue
:(Sträng) Entitetsfält gammalt värde.NewValue
:(Sträng) Entitetsfält nytt värde.UserCode
:Applikationsanvändarens unika identifierare. (obligatoriskt)TransactionCode
:Varje operation som ändrar entiteterna kommer att behöva ha en unik transaktionskod (som GUID) (obligatorisk),
I händelse av en uppdatering av en entitet som ändrar flera fält, kommer denna kolumn att vara nyckelpunkten för att spåra alla ändringar i uppdateringen (transkation)ChangeDate
:Transaktions Datum. (obligatoriskt)FieldType
:uppräkning eller text som visar fälttypen som TEXT eller Double. (obligatoriskt)
Med detta tillvägagångssätt
Alla enheter (tabeller) kan spåras
Rapporterna kommer att vara läsbara
Endast ändringar kommer att loggas.
Transaktionskoden kommer att vara nyckeln för att upptäcka ändringar av en enda action.
BTW
Store the changes in the entitychange table and then store the value
according to its datatype in entitychange_[bool|timestamp|double|string]
Behövs inte, i den enskilda tabellen kommer du att ha ändringar och datatyper
Use partitioning by HASH(entity_id)
Jag föredrar att partitionera efter ChangeDate eller skapa backup-tabeller för changeDate som är gamla nog att säkerhetskopieras och tas bort från LOG-huvudtabellen
Should I use another database system, maybe MongoDB?
Vilken databas som helst kommer med sina egna för- och nackdelar, du kan använda designen på alla RDBMS. En användbar jämförelse av dokumentbaserade databaser som MongoDB kan hittas här
hoppas vara till hjälp.