Sepertinya Anda mencoba menerapkan Temporal Database . Dukungan temporal adalah salah satu tambahan utama pada standar ANSI/ISO SQL:2011. MySQL (seperti kebanyakan RDBMS) tertinggal dari standar. Pikirkan Database Temporal sebagai DBMS yang setara dengan CVS/SVN/Git.
Sebaliknya, database tradisional yang kami gunakan tanpa fitur temporal dapat disebut Database Saat Ini .
Dalam Database Saat Ini , jika Anda mencoba menerapkan dukungan temporal, Anda bisa gagal dalam banyak hal dengan pendekatan yang berbeda:
-
Pendekatan satu meja. Saat Anda perlu melakukan modifikasi, lakukan
UPDATEs
pada catatan asli Anda, dan kecuali Anda memiliki semacam logika pemicu/audit buatan sendiri, jejak riwayat tidak ada. Bahkan jika Anda memiliki log audit/perubahan, Anda harus melakukan penggalian yang buruk untuk merekonstruksi riwayat perubahan. -
Pendekatan dua meja. Alih-alih membuat modifikasi di tempat, Anda membagi data menjadi dua tabel, satu dengan catatan dasar/asli (misalnya pemesanan), dan tabel lain untuk perubahan/modifikasi/delta Anda. Maka setidaknya Anda menyimpan data asli Anda, tetapi sekali lagi Anda harus menulis logika kompleks untuk melihat data asli dengan modifikasi berlapis. Lebih buruk lagi jika Anda hanya menginginkan beberapa dari modifikasi yang diterapkan.
-
Pendekatan tabel resultan yang dihitung sebelumnya . Anda menyimpan 3 atau lebih tabel:catatan dasar, modifikasi, dan juga tabel yang mencoba untuk selalu memiliki hasil (terus memperbarui basis + modifikasi). Semoga berhasil menulis pemicu dan prosedur untuk melakukan perhitungan ini setiap kali Anda melakukan
INSERTs
, dan Surga membantu Anda jikaUPDATEs
atauDELETE
dibutuhkan. Penyiapannya rapuh dan bisa tidak sinkron, seperti deadlock &rollback. Jika Anda tidak melakukan ini di dalam DB dengan pemicu/prosedur, Anda dapat mencoba menerapkan perhitungan yang dihasilkan dalam kode aplikasi, tetapi semoga berhasil -- dan itu bisa menjadi jelek dengan konsumen multi-utas. Dan tetap saja, Anda tidak memiliki akses mudah ke hasil hanya dengan beberapa modifikasi diterapkan.
Kesimpulan: Jika Anda tidak terbatas pada MySQL, Anda harus benar-benar mempertimbangkan untuk menggunakan DB yang memiliki dukungan temporal bawaan. Jika tidak, Anda akan menerapkan kembali roda.