Saya harus mengklarifikasi dulu bahwa kolom status tidak dimaksudkan untuk mencerminkan status item dunia nyata yang diwakili oleh catatan (baris) dalam tabel. Sebaliknya, itu dimaksudkan untuk menunjukkan status catatan itu sendiri.
Ini dapat sesederhana Aktif / Tidak Aktif atau rumit seperti Disetujui / Dihapus / Dikunci / Ditunda, dll. Status dapat disimpan pada kolom boolean / integer pendek atau kolom karakter tunggal, dengan pemetaan seperti true
/ 1
= Aktif atau A
= Disetujui.
Ide dasarnya adalah untuk memiliki dukungan pemulihan recycle bin / trash-like dalam aplikasi (dan mensimulasikannya dalam database). Jika ada GUI front-end atau antarmuka lain yang seharusnya dapat membuat pengguna "menghapus" catatan, itu sebenarnya tidak menghapus catatan dalam tabel, tetapi hanya mengubah status catatan menjadi Tidak Aktif atau Dihapus. Ketika antarmuka mengambil catatan, selalu mendapat catatan yang hanya cocok dengan kondisi bahwa statusnya Aktif atau Disetujui.
Jika pengguna membuat kesalahan dan catatan "dihapus" (dalam perspektif pengguna) perlu dipulihkan, DBA dapat dengan mudah menambal catatan kembali menjadi Aktif atau Disetujui, yang akan lebih baik daripada mencari cadangan dan mudah-mudahan menemukan catatan asli sana. Atau antarmuka itu sendiri dapat membiarkan pengguna melihat catatan yang dihapus dalam tampilan terpisah, dan mengembalikannya sesuai kebutuhan, atau bahkan menghapusnya secara permanen (menghapus catatan aktual).
Pertanyaan saya:
- Apakah ini praktik yang baik, atau praktik yang buruk?
- Apakah itu memengaruhi normalisasi data?
- Apa potensi jebakan?
- Apakah ada metode alternatif untuk mencapai tujuan yang sama? (Lihat Catatan)
- Bagaimana Anda bisa membuat database memberlakukan batasan unik pada data hanya untuk status tertentu (tetapi memungkinkan sejumlah duplikat untuk status lain)?
- Mengapa basis data tidak menyediakan fitur "tempat sampah" atau pelacakan tabel / pemulihan secara native, sehingga kami dapat membiarkan antarmuka menghapus catatan aktual tanpa khawatir?
Catatan: Saya membaca tentang mempertahankan tabel sejarah yang terpisah tetapi tampaknya lebih buruk dalam hal penyimpanan dan harus menghasilkan pemicu dan menjaga pemicu tetap up-to-date dengan skema tabel yang dilacak.