Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Menyimpan perubahan pada entitas:Apakah MySQL solusi yang tepat?

Jika saya menghadapi masalah yang Anda sebutkan, saya akan mendesain tabel LOG seperti di bawah ini:

  1. EntityName :(String) Entitas yang sedang dimanipulasi.(wajib)
  2. ObjectId :Entitas yang sedang dimanipulasi, kunci utama.
  3. FieldName :(String) Nama bidang entitas.
  4. OldValue :(String) Nilai lama bidang entitas.
  5. NewValue :(String) Nilai baru bidang entitas.
  6. UserCode :Pengidentifikasi unik pengguna aplikasi. (wajib)
  7. TransactionCode :Setiap operasi yang mengubah entitas harus memiliki kode transaksi unik (seperti GUID) (wajib),
    Jika ada pembaruan pada entitas yang mengubah beberapa bidang, kolom ini akan menjadi titik kunci untuk melacak semua perubahan di pembaruan (transaksi)
  8. ChangeDate :Tanggal transaksi. (wajib)
  9. FieldType :enumerasi atau teks yang menunjukkan jenis bidang seperti TEXT atau Double. (wajib)

Memiliki pendekatan ini
Setiap entitas (tabel) dapat dilacak
Laporan akan dapat dibaca
Hanya perubahan yang akan dicatat.
Kode transaksi akan menjadi titik kunci untuk mendeteksi perubahan dengan satu tindakan.

BTW

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

Tidak perlu, dalam satu tabel Anda akan memiliki perubahan dan tipe data

Use partitioning by HASH(entity_id)

Saya lebih suka mempartisi dengan ChangeDate atau membuat tabel cadangan untuk changeDate yang cukup lama untuk dicadangkan dan dihapus dari tabel LOG utama

Should I use another database system, maybe MongoDB?

Basis data apa pun dilengkapi dengan kelebihan dan kekurangannya sendiri, Anda dapat menggunakan desain pada RDBMS mana pun. Perbandingan yang berguna dari basis data berbasis dokumen seperti MongoDB dapat ditemukan di sini

semoga bermanfaat.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Temukan dua kolom di laravel yang memiliki nilai yang sama melalui Eloquent?

  2. Setara dengan varchar (maks) di MySQL?

  3. Bagaimana cara menyimpan gambar di MySQL?

  4. Tabel target UPDATE tidak dapat diperbarui

  5. Menghapus MySQL 5.7 Sepenuhnya