sql >> Database teknologi >  >> RDS >> Mysql

Lagring af ændringer på enheder:Er MySQL den rigtige løsning?

Hvis jeg stod over for det problem, du nævnte, ville jeg designe LOG-tabellen som nedenfor:

  1. EntityName :(String) Enhed, der bliver manipuleret.(obligatorisk)
  2. ObjectId :Enhed, der bliver manipuleret, primær nøgle.
  3. FieldName :(String) Navn på enhedsfelt.
  4. OldValue :(String) Entitetsfelt gammel værdi.
  5. NewValue :(String) Entitetsfelt ny værdi.
  6. UserCode :Applikationsbrugerens unikke identifikator. (obligatorisk)
  7. 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)
  8. ChangeDate :Overførselsdato. (obligatorisk)
  9. 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.



  1. Hvorfor kan jeg ikke bruge alias i en count(*) kolonne og henvise til det i en have-sætning?

  2. StrongLoop:EmbedsMany vs hasMany og belongTo

  3. Subtraktion af to lige store værdier er ikke nul i mysql

  4. VÆLG Fra MySQL-visning med HAVING-klausul returnerer et tomt resultatsæt