Oke, ini adalah penulisan ulang. Apa yang saya lewatkan ketika saya pertama kali menjawab adalah bahwa aplikasi menyimpan History-nya di tabel utama. Sekarang saya mengerti mengapa @NickCraver sangat menyesal tentang kode tersebut.
Nah hal pertama yang harus dilakukan adalah memburu para pelaku desain ini dan memastikan mereka tidak akan melakukannya lagi. Menyimpan riwayat seperti ini tidak berskala, membuat kueri normal (non-historis) lebih rumit dan menyabotase integritas relasional. Jelas ada skenario di mana semua itu tidak penting, dan mungkin situs Anda adalah salah satunya, tetapi secara umum ini adalah implementasi yang sangat buruk.
Cara terbaik untuk melakukan ini adalah Oracle 11g Total Recall . Ini adalah solusi yang elegan, dengan implementasi yang sama sekali tidak terlihat dan efisien, dan - menurut standar tambahan biaya Oracle lainnya - cukup terjangkau.
Tetapi jika Total Recall tidak mungkin dan Anda benar-benar harus melakukannya, jangan izinkan pembaruan . Perubahan pada catatan CONTACT yang ada harus berupa sisipan. Untuk membuat ini berfungsi, Anda mungkin perlu membuat tampilan dengan pemicu BUKAN. Ini masih menjijikkan tapi tidak seburuk yang Anda miliki sekarang.
Pada Oracle 11.2.0.4 Total Recall telah berganti nama menjadi Arsip Flashback dan disertakan sebagai bagian dari Lisensi Perusahaan (meskipun dicukur dari tabel jurnal terkompresi kecuali kami membeli opsi Kompres Lanjutan).
Sumbangan dari Oracle ini harus menjadikan FDA cara normal untuk menyimpan riwayat:efisien, performatif, Oracle built-in dengan sintaks standar untuk mendukung kueri historis. Sayangnya saya berharap untuk melihat implementasi setengah matang dengan pemicu spatchcocked, kunci utama yang rusak, dan kinerja yang mengerikan selama bertahun-tahun. Karena penjurnalan tampaknya menjadi salah satu gangguan yang disukai pengembang, terlepas dari kenyataan bahwa itu adalah pipa tingkat rendah yang sebagian besar tidak relevan dengan 99,99% dari semua operasi bisnis.