Jika saya menghadapi masalah yang Anda sebutkan, saya akan mendesain tabel LOG seperti di bawah ini:
EntityName
:(String) Entitas yang sedang dimanipulasi.(wajib)ObjectId
:Entitas yang sedang dimanipulasi, kunci utama.FieldName
:(String) Nama bidang entitas.OldValue
:(String) Nilai lama bidang entitas.NewValue
:(String) Nilai baru bidang entitas.UserCode
:Pengidentifikasi unik pengguna aplikasi. (wajib)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)ChangeDate
:Tanggal transaksi. (wajib)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.