Apa keuntungan dari melakukan penghapusan logis / lunak dari sebuah rekaman (yaitu menyetel bendera yang menyatakan bahwa rekaman tersebut dihapus) dibandingkan dengan menghapus rekaman secara aktual atau fisik?
Apakah ini praktik umum?
Apakah ini aman?
sql
database
soft-delete
pengguna21826
sumber
sumber
Jawaban:
Keuntungannya adalah Anda menyimpan riwayat (baik untuk audit) dan Anda tidak perlu khawatir tentang penghapusan secara bertahap melalui berbagai tabel lain dalam database yang mereferensikan baris yang Anda hapus. Kerugiannya adalah Anda harus mengkodekan metode pelaporan / tampilan apa pun untuk memperhitungkan bendera.
Sejauh ini adalah praktik umum - saya akan mengatakan ya, tetapi dengan apa pun apakah Anda menggunakannya tergantung pada kebutuhan bisnis Anda.
EDIT: Memikirkan kerugian lain - Jika Anda memiliki indeks unik pada tabel, catatan yang dihapus masih akan menggunakan catatan "satu", jadi Anda harus mengkodekan kemungkinan itu juga (misalnya, tabel Pengguna yang memiliki indeks unik pada nama pengguna; Catatan yang dihapus masih akan memblokir nama pengguna pengguna yang dihapus untuk catatan baru. Mengatasi masalah ini Anda dapat menempelkan GUID ke kolom nama pengguna yang dihapus, tetapi ini adalah solusi yang sangat hacky yang tidak akan saya rekomendasikan. Mungkin dalam keadaan seperti itu akan lebih baik memiliki aturan bahwa setelah nama pengguna digunakan, itu tidak akan pernah bisa diganti.)
sumber
CREATE UNIQUE INDEX ... WHERE DELETED_AT is null
(di PostgreSQL) dan kemudian semua baris dengan tanggal penghapusan tidak diindeks. (Mereka dapat dimasukkan dalam indeks non-unik sebagai gantinya.)Apakah penghapusan logis merupakan praktik umum? Ya, saya telah melihat ini di banyak tempat. Apakah mereka aman? Itu benar-benar tergantung apakah mereka kurang aman dari data sebelum Anda menghapusnya?
Ketika saya menjadi Pimpinan Teknologi, saya menuntut agar tim kami menyimpan setiap bagian data, saya tahu pada saat itu bahwa kami akan menggunakan semua data itu untuk membangun berbagai aplikasi BI, meskipun pada saat itu kami tidak tahu apa persyaratannya. menjadi. Meskipun ini bagus dari sudut pandang audit, pemecahan masalah, dan pelaporan (Ini adalah situs e-niaga / alat untuk transaksi B2B, dan jika seseorang menggunakan alat, kami ingin mencatatnya bahkan jika akun mereka kemudian dimatikan), itu memang memiliki beberapa kelemahan.
Kerugiannya termasuk (tidak termasuk yang lain yang telah disebutkan):
Saat memutuskan untuk menggunakan logis, penghapusan fisik, atau pengarsipan, saya akan bertanya pada diri sendiri pertanyaan-pertanyaan ini:
sumber
Activated
tabel danDeactivated
skema tabel -Id,Name,etc..
Baris masukActivated
-1001,Smith007,etc...
Ketika dia dinonaktifkan, maka kita dapat menghapus semua kecuali kolom ID untuk smith inActivated
dan menambahkannya keDeactivated
.Mungkin agak terlambat tetapi saya menyarankan semua orang untuk memeriksa posting blog Pinal Dave tentang penghapusan logis / lunak:
sumber
Saya adalah pengembang NoSQL, dan pada pekerjaan terakhir saya, saya bekerja dengan data yang selalu penting bagi seseorang, dan jika dihapus secara tidak sengaja pada hari yang sama saat dibuat, saya tidak dapat menemukannya di cadangan terakhir dari kemarin! Dalam situasi seperti itu, penghapusan lembut selalu menyelamatkan hari.
Saya melakukan soft-deletion menggunakan stempel waktu, mendaftarkan tanggal dokumen dihapus:
Setiap hari Minggu, proses berjalan di database dan memeriksa
IsDeleted
lapangan. Jika perbedaan antara tanggal sekarang dan stempel waktu lebih besar dari N hari, dokumen itu dihapus permanen. Mengingat dokumen tersebut masih tersedia di beberapa cadangan, itu aman untuk dilakukan.EDIT: Kasus penggunaan NoSQL ini tentang dokumen besar yang dibuat dalam database, puluhan atau ratusan di antaranya setiap hari, tetapi tidak ribuan atau jutaan. Secara umum, mereka adalah dokumen dengan status, data, dan lampiran proses alur kerja. Itulah alasan mengapa ada kemungkinan pengguna menghapus dokumen penting. Pengguna ini bisa jadi seseorang dengan hak istimewa Admin, atau mungkin pemilik dokumen, hanya untuk beberapa nama.
TL; DR Kasus penggunaan saya bukan Big Data. Dalam hal ini, Anda memerlukan pendekatan yang berbeda.
sumber
Salah satu pola yang saya gunakan adalah membuat tabel cermin dan melampirkan pemicu pada tabel utama, sehingga semua penghapusan (dan pembaruan jika diinginkan) dicatat di tabel cermin.
Hal ini memungkinkan Anda untuk "merekonstruksi" catatan yang dihapus / diubah, dan Anda masih dapat menghapus secara paksa di tabel utama dan menjaganya tetap "bersih" - ini juga memungkinkan pembuatan fungsi "urung", dan Anda juga dapat merekam tanggal, waktu , dan pengguna yang melakukan tindakan di meja cermin (sangat berharga dalam situasi perburuan penyihir).
Keuntungan lainnya adalah tidak ada kemungkinan secara tidak sengaja menyertakan rekaman yang dihapus saat melakukan kueri dari yang utama kecuali jika Anda sengaja mengalami masalah saat memasukkan rekaman dari tabel cermin (Anda mungkin ingin memperlihatkan rekaman langsung dan dihapus).
Keuntungan lainnya adalah tabel cermin dapat dihapus secara independen, karena tidak boleh memiliki referensi kunci asing yang sebenarnya, menjadikannya operasi yang relatif sederhana dibandingkan dengan pembersihan dari tabel utama yang menggunakan penghapusan lunak tetapi masih memiliki koneksi referensial ke tabel lain.
Keuntungan lain apa? - bagus jika Anda memiliki banyak pembuat kode yang mengerjakan proyek, membaca di database dengan keterampilan campuran dan perhatian pada tingkat detail, Anda tidak perlu begadang dengan harapan salah satu dari mereka tidak lupa untuk tidak menyertakan dihapus catatan (lol, Not Include Deleted Records = True), yang menghasilkan hal-hal seperti melebih-lebihkan, katakanlah posisi kas tersedia klien yang kemudian mereka beli beberapa saham (misalnya, seperti dalam sistem perdagangan), ketika Anda bekerja dengan sistem perdagangan, Anda akan mengetahui dengan sangat cepat nilai dari solusi yang kuat, meskipun mereka mungkin memiliki sedikit lebih banyak "overhead" awal.
Pengecualian:
- sebagai panduan, gunakan penghapusan lunak untuk data "referensi" seperti pengguna, kategori, dll., Dan hapus permanen ke tabel cermin untuk data jenis "fakta", yaitu riwayat transaksi.
sumber
Saya biasanya menggunakan penghapusan logis - saya merasa mereka bekerja dengan baik ketika Anda juga sesekali mengarsipkan dari data yang 'dihapus' ke tabel yang diarsipkan (yang dapat dicari jika perlu) sehingga tidak memiliki peluang untuk mempengaruhi kinerja aplikasi.
Ini berfungsi dengan baik karena Anda masih memiliki datanya jika Anda pernah diaudit. Jika Anda menghapusnya secara fisik, itu hilang !
sumber
Saya penggemar berat penghapusan logis, terutama untuk aplikasi Lini Bisnis, atau dalam konteks akun pengguna. Alasan saya sederhana: sering kali saya tidak ingin pengguna dapat menggunakan sistem lagi (sehingga akun ditandai sebagai dihapus), tetapi jika kami menghapus pengguna, kami akan kehilangan semua pekerjaan mereka dan semacamnya.
Skenario umum lainnya adalah bahwa pengguna mungkin dibuat ulang beberapa saat setelah dihapus. Ini adalah pengalaman yang jauh lebih baik bagi pengguna untuk menampilkan semua data seperti sebelum dihapus, daripada harus membuatnya kembali.
Saya biasanya menganggap menghapus pengguna lebih sebagai "menangguhkan" mereka tanpa batas. Anda tidak pernah tahu kapan mereka benar-benar harus kembali.
sumber
Saya hampir selalu menghapus sementara dan inilah alasannya:
isdeleted
mana - mana tidak menjadi masalah, Anda harus memeriksauserid
tetap (jika database berisi data dari banyak pengguna). Anda dapat menerapkan pemeriksaan dengan kode, dengan menempatkan dua pemeriksaan tersebut pada fungsi terpisah (atau menggunakan tampilan)sumber
Re: "Apakah ini aman?" - tergantung apa yang kamu maksud.
Jika Anda bermaksud bahwa dengan melakukan penghapusan fisik, Anda akan mencegah siapa pun menemukan data yang dihapus , maka ya, itu lebih atau kurang benar; Anda lebih aman dalam menghapus data sensitif yang perlu dihapus secara fisik, karena itu berarti data tersebut hilang secara permanen dari database. (Namun, ketahuilah bahwa mungkin ada salinan lain dari data yang dipermasalahkan, seperti di cadangan, atau log transaksi, atau versi yang direkam dari transit, mis. Packet sniffer - hanya karena Anda menghapus dari database Anda tidak menjamin itu tidak disimpan di tempat lain.)
Jika Anda bermaksud bahwa dengan melakukan penghapusan logis, data Anda lebih aman karena Anda tidak akan pernah kehilangan data apa pun , itu juga benar. Ini bagus untuk skenario audit; Saya cenderung merancang seperti ini karena mengakui fakta dasar bahwa begitu data dibuat, data tidak akan pernah benar - benar hilang (terutama jika pernah memiliki kemampuan, katakanlah, di-cache oleh mesin pencari internet). Tentu saja, skenario audit nyata mensyaratkan bahwa tidak hanya penghapusan logis, tetapi pembaruan juga dicatat, bersama dengan waktu perubahan dan aktor yang membuat perubahan.
Jika Anda bermaksud bahwa data tidak akan jatuh ke tangan siapa pun yang tidak seharusnya melihatnya, maka itu sepenuhnya terserah aplikasi Anda dan struktur keamanannya. Dalam hal ini, penghapusan logis tidak lebih atau kurang aman dari apa pun di database Anda.
sumber
Saya sangat tidak setuju dengan penghapusan logis karena Anda menghadapi banyak kesalahan.
Pertama-tama kueri, setiap kueri harus menjaga bidang IsDeleted dan kemungkinan kesalahan menjadi lebih tinggi dengan kueri kompleks.
Kedua kinerja: bayangkan tabel dengan 100000 recs dengan hanya 3 aktif, sekarang kalikan angka ini untuk tabel database Anda; masalah kinerja lainnya adalah kemungkinan konflik dengan catatan baru dengan yang lama (catatan yang dihapus).
Satu-satunya keuntungan yang saya lihat adalah riwayat rekaman, tetapi ada metode lain untuk mencapai hasil ini, misalnya Anda dapat membuat tabel pencatatan di mana Anda dapat menyimpan info: di
TableName,OldValues,NewValues,Date,User,[..]
mana*Values
bisavarchar
dan menulis detailnya dalam formulir inifieldname : value
; [..] atau simpan info sebagaixml
.Semua ini dapat dicapai melalui kode atau Pemicu tetapi Anda hanya SATU tabel dengan semua riwayat Anda. Opsi lainnya adalah untuk melihat apakah mesin database yang ditentukan adalah dukungan asli untuk pelacakan perubahan, misalnya pada database SQL Server terdapat SQL Track Data Change.
sumber
Saya biasa melakukan soft-delete, hanya untuk menyimpan catatan lama. Saya menyadari bahwa pengguna tidak repot-repot melihat rekaman lama sesering yang saya kira. Jika pengguna ingin melihat catatan lama, mereka bisa melihat dari arsip atau tabel audit, bukan? Jadi, apa keuntungan soft-delete? Ini hanya mengarah ke pernyataan kueri yang lebih kompleks, dll.
Berikut adalah hal-hal yang telah saya terapkan, sebelum saya memutuskan untuk tidak menghapus-lunak lagi:
mengimplementasikan audit, untuk merekam semua aktivitas (menambah, mengedit, menghapus). Pastikan tidak ada kunci asing yang ditautkan ke audit, dan pastikan tabel ini diamankan dan tidak ada yang dapat menghapus kecuali administrator.
mengidentifikasi tabel mana yang dianggap sebagai "tabel transaksional", yang kemungkinan besar akan disimpan untuk waktu yang lama, dan kemungkinan besar pengguna ingin melihat catatan atau laporan sebelumnya. Sebagai contoh; transaksi pembelian. Tabel ini tidak hanya menyimpan id tabel master (seperti dept-id), tetapi juga menyimpan info tambahan seperti nama sebagai referensi (seperti nama-dept), atau bidang lain yang diperlukan untuk pelaporan.
Menerapkan catatan "aktif / tidak aktif" atau "aktifkan / nonaktifkan" atau "sembunyikan / tampilkan" dari tabel master. Jadi, alih-alih menghapus record, pengguna dapat menonaktifkan / menonaktifkan master record. Jauh lebih aman dengan cara ini.
Hanya opini dua sen saya.
sumber
Penghapusan logis jika sulit pada integritas referensial.
Ini adalah pemikiran yang tepat untuk dilakukan bila ada aspek temporal dari data tabel (berlaku FROM_DATE - TO_DATE).
Jika tidak, pindahkan data ke Tabel Pengauditan dan hapus catatan.
Sisi positifnya:
Ini adalah cara termudah untuk melakukan rollback (jika memungkinkan).
Sangat mudah untuk melihat bagaimana keadaan pada titik waktu tertentu.
sumber
Ini cukup standar dalam kasus di mana Anda ingin menyimpan riwayat sesuatu (mis. Akun pengguna seperti yang disebutkan @Jon Dewees). Dan tentu saja merupakan ide bagus jika ada kemungkinan besar pengguna meminta penghapusan.
Jika Anda khawatir tentang logika memfilter rekaman yang dihapus dari kueri Anda menjadi berantakan dan hanya memperumit kueri Anda, Anda bisa membuat tampilan yang melakukan pemfilteran untuk Anda dan menggunakan kueri untuk itu. Ini akan mencegah kebocoran catatan ini dalam solusi pelaporan dan semacamnya.
sumber
Ada persyaratan di luar desain sistem yang perlu dijawab. Apa persyaratan hukum atau undang-undang dalam penyimpanan catatan? Bergantung pada apa baris terkait, mungkin ada persyaratan hukum bahwa data disimpan untuk jangka waktu tertentu setelah 'ditangguhkan'.
Di sisi lain, persyaratannya mungkin sekali catatan 'dihapus', itu benar-benar dihapus dan tidak dapat dibatalkan. Sebelum Anda membuat keputusan, bicarakan dengan pemangku kepentingan Anda.
sumber
Aplikasi seluler yang bergantung pada sinkronisasi mungkin memberlakukan penggunaan penghapusan logis daripada penghapusan fisik: server harus dapat menunjukkan kepada klien bahwa catatan telah (ditandai sebagai) dihapus, dan ini mungkin tidak dapat dilakukan jika catatan dihapus secara fisik.
sumber
Mereka tidak membiarkan database bekerja sebagaimana mestinya membuat hal-hal seperti fungsi kaskade menjadi tidak berguna.
Untuk hal-hal sederhana seperti sisipan, dalam kasus penyisipan ulang, maka kode di belakangnya akan berlipat ganda.
Anda tidak bisa begitu saja menyisipkan, sebagai gantinya Anda harus memeriksa keberadaan dan menyisipkan jika tidak ada sebelumnya atau memperbarui bendera penghapusan jika ada sementara juga memperbarui semua kolom lain ke nilai baru. Ini dilihat sebagai pembaruan ke log transaksi database dan bukan penyisipan baru yang menyebabkan log audit tidak akurat.
Mereka menyebabkan masalah kinerja karena tabel dipenuhi dengan data yang berlebihan. Ini memainkan kekacauan dengan pengindeksan terutama dengan keunikan.
Saya bukan penggemar berat penghapusan logis.
sumber
Untuk membalas komentar Tohid, kami menghadapi masalah yang sama di mana kami ingin mempertahankan sejarah catatan dan juga kami tidak yakin apakah kami ingin
is_deleted
kolom atau tidak.Saya berbicara tentang implementasi python kami dan kasus penggunaan serupa yang kami pukul.
Kami menemukan https://github.com/kvesteri/sqlalchemy-continuum yang merupakan cara mudah untuk mendapatkan tabel versi untuk tabel Anda yang sesuai. Baris kode minimum dan riwayat menangkap untuk menambah, menghapus, dan memperbarui.
Ini melayani lebih dari sekedar
is_deleted
kolom. Anda selalu dapat mengembalikan tabel versi untuk memeriksa apa yang terjadi dengan entri ini. Apakah entri dihapus, diperbarui atau ditambahkan.Dengan cara ini kami tidak perlu memiliki
is_deleted
kolom sama sekali dan fungsi hapus kami cukup sepele. Dengan cara ini kita juga tidak perlu mengingat untuk menandaiis_deleted=False
di salah satu api kita.sumber
Soft Delete adalah praktik pemrograman yang diikuti di sebagian besar aplikasi jika datanya lebih relevan. Pertimbangkan kasus aplikasi keuangan di mana penghapusan karena kesalahan pengguna akhir bisa berakibat fatal. Itulah kasus ketika hapus lembut menjadi relevan. Dalam penghapusan lunak, pengguna tidak benar-benar menghapus data dari rekaman melainkan ditandai sebagai IsDeleted to true (Dengan konvensi normal).
Dalam EF 6.x atau EF 7 dan seterusnya Softdelete ditambahkan sebagai atribut tetapi kita harus membuat atribut khusus untuk saat ini.
Saya sangat merekomendasikan SoftDelete Dalam desain database dan konvensi yang baik untuk praktik pemrograman.
sumber
Seringkali softdeleting digunakan karena Anda tidak ingin mengekspos beberapa data tetapi Anda harus menyimpannya karena alasan historis (Sebuah produk dapat dihentikan, jadi Anda tidak ingin ada transaksi baru dengannya tetapi Anda masih perlu bekerja dengannya. sejarah transaksi penjualan). Ngomong-ngomong, ada juga yang menyalin nilai informasi produk di data transaksi penjualan alih-alih membuat referensi ke produk untuk menangani hal ini.
Nyatanya, ini lebih terlihat seperti merekam ulang untuk fitur yang terlihat / tersembunyi atau aktif / tidak aktif. Karena itulah arti "hapus" dalam dunia bisnis. Saya ingin mengatakan bahwa Terminator dapat menghapus orang tetapi bos hanya memecat mereka.
Latihan ini adalah pola yang cukup umum dan digunakan oleh banyak aplikasi karena berbagai alasan. Karena Ini bukan satu-satunya cara untuk mencapai ini, jadi Anda akan melihat ribuan orang mengatakan itu hebat atau omong kosong dan keduanya memiliki argumen yang cukup bagus.
Dari sudut pandang keamanan, SoftDelete tidak akan menggantikan pekerjaan Audit dan juga tidak akan menggantikan pekerjaan cadangan. Jika Anda takut dengan "penyisipan / penghapusan antara dua kasus cadangan", Anda harus membaca tentang Model Pemulihan Penuh atau Massal. Saya akui bahwa SoftDelete dapat membuat proses pemulihan menjadi lebih sepele.
Terserah Anda untuk mengetahui kebutuhan Anda.
sumber
Sebagai alternatif, kami memiliki pengguna yang menggunakan perangkat jarak jauh yang memperbarui melalui MobiLink. Jika kita menghapus record di database server, record tersebut tidak akan pernah ditandai dihapus di database klien.
Jadi kami melakukan keduanya. Kami bekerja dengan klien kami untuk menentukan berapa lama mereka ingin dapat memulihkan data. Misalnya, umumnya pelanggan dan produk aktif hingga klien kami mengatakan bahwa mereka harus dihapus, tetapi riwayat penjualan hanya disimpan selama 13 bulan dan kemudian dihapus secara otomatis. Klien mungkin ingin menyimpan pelanggan dan produk yang dihapus selama dua bulan tetapi mempertahankan sejarah selama enam bulan.
Jadi kami menjalankan skrip semalaman yang menandai hal-hal yang dihapus secara logis sesuai dengan parameter ini dan kemudian dua / enam bulan kemudian, apa pun yang ditandai dihapus secara logis hari ini akan dihapus secara permanen.
Kami kurang tentang keamanan data daripada memiliki database yang sangat besar pada perangkat klien dengan memori terbatas, seperti smartphone. Seorang klien yang memesan 200 produk dua kali seminggu selama empat tahun akan memiliki lebih dari 81.000 baris riwayat, di mana 75% klien tidak peduli jika dia melihatnya.
sumber
Itu semua tergantung pada kasus penggunaan sistem dan datanya.
Misalnya, jika Anda berbicara tentang sistem yang diatur oleh pemerintah (misalnya sistem di perusahaan farmasi yang dianggap sebagai bagian dari sistem mutu dan harus mengikuti pedoman FDA untuk catatan elektronik), maka sebaiknya Anda tidak melakukan hard delete! Auditor dari FDA dapat masuk dan meminta semua catatan dalam sistem yang berkaitan dengan nomor produk ABC-123, dan semua data sebaiknya tersedia. Jika pemilik proses bisnis Anda mengatakan bahwa sistem tidak boleh mengizinkan siapa pun untuk menggunakan nomor produk ABC-123 pada rekaman baru di masa mendatang, gunakan metode hapus lunak untuk membuatnya "tidak aktif" dalam sistem, sambil tetap mempertahankan data historis.
Namun, mungkin sistem Anda dan datanya memiliki kasus penggunaan seperti "melacak cuaca di Kutub Utara". Mungkin Anda melakukan pembacaan suhu sekali setiap jam, dan pada penghujung hari menjumlahkan rata-rata harian. Mungkin data per jam tidak akan pernah digunakan lagi setelah agregasi, dan Anda akan menghapus pembacaan per jam setelah membuat agregat. (Ini adalah contoh yang dibuat-buat dan sepele.)
Intinya adalah, itu semua tergantung pada kasus penggunaan sistem dan datanya, dan bukan keputusan yang dibuat murni dari sudut pandang teknologi.
sumber
Baik! Seperti yang dikatakan semua orang, itu tergantung situasinya.
Jika Anda memiliki indeks pada kolom seperti UserName atau EmailID - dan Anda tidak pernah mengharapkan UserName atau EmailID yang sama digunakan lagi; Anda bisa menggunakan soft delete.
Karena itu, selalu periksa apakah operasi SELECT Anda menggunakan kunci utama. Jika pernyataan SELECT Anda menggunakan kunci utama, menambahkan bendera dengan klausa WHERE tidak akan membuat banyak perbedaan. Mari kita ambil contoh (Pseudo):
Pengguna Tabel (UserID [primary key], EmailID, IsDeleted)
Kueri ini tidak akan membuat perbedaan apa pun dalam hal kinerja karena kolom UserID memiliki kunci utama. Awalnya, ini akan memindai tabel berdasarkan PK dan kemudian menjalankan kondisi selanjutnya.
Kasus di mana penghapusan lunak tidak dapat bekerja sama sekali:
Daftar di sebagian besar situs web menggunakan EmailID sebagai identifikasi unik Anda. Kami tahu betul, sekali EmailID digunakan di situs web seperti facebook, G +, itu tidak dapat digunakan oleh orang lain.
Ada saatnya pengguna ingin menghapus profilnya dari situs web. Sekarang, jika Anda membuat penghapusan logis, pengguna tersebut tidak akan pernah bisa mendaftar lagi. Selain itu, mendaftar lagi menggunakan EmailID yang sama tidak berarti memulihkan seluruh riwayat. Semua orang tahu, penghapusan berarti penghapusan. Dalam skenario seperti itu, kami harus melakukan penghapusan fisik. Namun untuk mempertahankan seluruh riwayat akun, kami harus selalu mengarsipkan catatan tersebut di tabel arsip atau tabel yang dihapus.
Ya, dalam situasi di mana kami memiliki banyak tabel asing, penanganannya cukup rumit.
Juga perlu diingat bahwa penghapusan lunak / logis akan meningkatkan ukuran tabel Anda, jadi ukuran indeks.
sumber
Saya sudah menjawab di posting lain . Namun, saya rasa jawaban saya lebih cocok dengan pertanyaan di sini.
sumber
Keuntungan adalah pelestarian / pelestarian data. Disventage akan menurunkan kinerja saat membuat kueri atau mengambil data dari tabel dengan jumlah soft delete yang signifikan. Dalam kasus kami, kami menggunakan kombinasi keduanya: seperti yang telah disebutkan orang lain dalam jawaban sebelumnya, kami
soft-delete
users/clients/customers
misalnya, danhard-delete
padaitems/products/merchandise
tabel di mana ada rekaman duplikat yang tidak perlu bee keept.sumber
Itu tergantung pada kasusnya, pertimbangkan hal di bawah ini:
Biasanya, Anda tidak perlu "menghapus lunak" data. Tetap sederhana dan cepat. mis. Menghapus produk tidak lagi tersedia, jadi Anda tidak perlu memeriksa bahwa produk tidak dihapus untuk sementara di seluruh aplikasi Anda (jumlah, daftar produk, produk yang direkomendasikan, dll.).
Namun, Anda mungkin mempertimbangkan "hapus lunak" dalam model gudang data. mis. Anda sedang melihat tanda terima lama pada produk yang dihapus. *
sumber