sql >> Databasteknik >  >> RDS >> Mysql

Lagra ändringar på enheter:Är MySQL den rätta lösningen?

Om jag stod inför problemet du nämnde, skulle jag designa LOG-tabellen som nedan:

  1. EntityName :(Sträng) Entitet som manipuleras.(obligatoriskt)
  2. ObjectId :Entitet som manipuleras, primärnyckel.
  3. FieldName :(Sträng) Entitetsfältnamn.
  4. OldValue :(Sträng) Entitetsfält gammalt värde.
  5. NewValue :(Sträng) Entitetsfält nytt värde.
  6. UserCode :Applikationsanvändarens unika identifierare. (obligatoriskt)
  7. 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)
  8. ChangeDate :Transaktions Datum. (obligatoriskt)
  9. 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.



  1. Solr Indexing My SQL Timestamp eller Date Time-fält

  2. mysqld:Kan inte ändra dir till data. Servern startar inte

  3. Exekvera flera SQL-frågor i en sats med PHP

  4. Beställa efter datum (varchar)?