Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Änderungen an Entitäten speichern:Ist MySQL die richtige Lösung?

Wenn ich mit dem von Ihnen erwähnten Problem konfrontiert wäre, würde ich eine LOG-Tabelle wie folgt entwerfen:

  1. EntityName :(String) Entität, die manipuliert wird. (obligatorisch)
  2. ObjectId :Entität, die manipuliert wird, Primärschlüssel.
  3. FieldName :(String) Feldname der Entität.
  4. OldValue :(String) Alter Wert des Entitätsfeldes.
  5. NewValue :(String) Neuer Wert des Entitätsfeldes.
  6. UserCode :Eindeutige Kennung des Anwendungsbenutzers. (obligatorisch)
  7. TransactionCode :Jede Operation, die die Entitäten ändert, muss einen eindeutigen Transaktionscode (wie GUID) haben (obligatorisch).
    Im Falle einer Aktualisierung einer Entität, die mehrere Felder ändert, ist diese Spalte der Schlüsselpunkt, um alle Änderungen zu verfolgen die Aktualisierung (Transaktion)
  8. ChangeDate :Transaktionsdatum. (obligatorisch)
  9. FieldType :Aufzählung oder Text, der den Feldtyp wie TEXT oder Double zeigt. (obligatorisch)

Mit diesem Ansatz
Jede Entität (Tabelle) kann nachverfolgt werden
Berichte sind lesbar
Nur Änderungen werden protokolliert.
Der Transaktionscode ist der Schlüsselpunkt, um Änderungen durch eine Person zu erkennen Aktion.

Übrigens

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

Wird nicht benötigt, in der einzelnen Tabelle haben Sie Änderungen und Datentypen

Use partitioning by HASH(entity_id)

Ich werde es vorziehen, nach ChangeDate zu partitionieren oder Sicherungstabellen für changeDate zu erstellen, die alt genug sind, um gesichert und aus der Haupt-LOG-Tabelle entfernt zu werden

Should I use another database system, maybe MongoDB?

Jede Datenbank hat ihre eigenen Vor- und Nachteile, Sie können das Design auf jedem RDBMS verwenden. Ein nützlicher Vergleich von dokumentenbasierten Datenbanken wie MongoDB finden Sie hier

hoffe hilfreich zu sein.